Erste Schritte Was bedeutet dieser Code?

Devanther

Top Contributor
Code:
public void simuliereEinenSchritt()
    {
        schritt++;
      
        // Platz für neugeborenes Tier anlegen.
        List<Tier> neueTiere = new ArrayList<Tier>();
        // Alle Tiere agieren lassen.
        for(Iterator<Tier> iter = tiere.iterator(); iter.hasNext(); ) {
            Tier tier = iter.next();
            tier.agiere(neueTiere);
            if(!tier.istLebendig()) {
                iter.remove();
            }
        }
      
        // Neugeborene Füchse und Hasen in die Hauptliste einfügen.
        tiere.addAll(neueTiere);

        ansicht.zeigeStatus(schritt, feld);
    }

Kann mir jemand bitte erklären, was die for Schleife macht?
Auf der Liste tiere wird die Methode iterator() aufgerufen, was machst sie?
Was bedeutet iter.hasNext();?
Was bedeutet iter.next();?

Und nach der for-Schleife heisst es, tiere.addALL....was wird hier gemacht?
Die Klasse Tier hat gar keine Methode addAll...

Dieser Code ist vom Projekt, Füchse und Hasen Simulation von BlueJ.
Leider verstehe ich nicht was in der Methode oben gemacht wird.
 

mrBrown

Super-Moderator
Mitarbeiter
Auf der Liste tiere wird die Methode iterator() aufgerufen, was machst sie?
Die Methode gibt einen Iterator zurück, mit dem man über Dinge, in diesem Fall die Liste, iterieren kann, indem man jeweils das nächste Element abfragt.

Was bedeutet iter.hasNext();?
hast du das mal übersetzt? ;)
Was bedeutet iter.next();?
Und das auch? ;)

Und nach der for-Schleife heisst es, tiere.addALL....was wird hier gemacht?
Die Klasse Tier hat gar keine Methode addAll...
tiere ist, wie du selbst gesagt hast, eine Liste von Tieren.
Was könnte wohl ein addAll mit einer Liste machen?
 

Devanther

Top Contributor
Auf der Liste Tiere wird die Methode iterator() aufgerufen, die einen Iterator zurückgibt.
Es wird ein Iterator zurückgegeben und in der Variablen "iter" gespeichert.

Und der prüft mit der Methode .hasNext() ob es weitere
Elemente gibt. Wenn es weitere Elemente gibt, wird true zurückgegeben.
Mit der Methode next() wird jedes Element(Tier) durchlaufen und
darauf wird die agiere() Methode aufgerufen?
Wenn das Tier tot ist, wird es aus dem Iterator entfernt.

Ist das so richtig?
 

Devanther

Top Contributor
Code:
public TeleporterRaum(Raum... raeume) // var args = variable anzahl von Argumenten
    {
        //raeume ist ein Array
        super("in einem Teleporterraum");
      
        for(int i = 0 ; i < raeume.length; i++){
            ausgaenge.put(String.valueOf(i),raeume[i]);  // String.valueOf(i) liefert i als String zurück
        }
      
    }

Was bedeutet folgende Zeile: ausgaenge.put(String.valueOf(i),raeume); ?
Mit super wird der Konstruktor der Superklasse Raum aufgerufen und eine Beschreibung wird übergeben.
Raum... raeume hier werden beliebig viele Räume übergeben, die alle vom
Typ Raum sein müssen?
raeume ist ein Array.


Code:
private Raum findeZufaelligenRaum()
    {
      
        List<String> keys = new ArrayList<>(ausgaenge.keySet()); //Diamond Operator
        Random random =  new Random();
        int zufaelligerIndex = random.nextInt(ausgaenge.size());
        Raum zufaelligerRaum = ausgaenge.get(keys.get(zufaelligerIndex));
        return zufaelligerRaum;
    }

ausgaenge.keySet() was passiert hier?
ausgaenge.get(keys.get(zufaelligerIndex)); was passiert da?

Das ist der Code von einem Spiel.
Wenn man den TeleporterRaum verlässt wird man in einen zufällig ausgewählten Raum gebeamt.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter

Devanther

Top Contributor
Hast du mal geguckt, was ausgaenge für ein Typ ist, und was die Methode put macht?

Welcher Typ ist denn ausgaenge? Die Methode put verknüpft den Wert mit dem Schlüssel?
Laut API: Associates the specified value with the specified key in this map
ausgaenge.put(String.valueOf(i),raeume);
verstehe ich leider nicht -.-

Auch hier: Mal nachgeguckt, was in der Doku steht? Die Methoden sind ziemlich leicht...

Ich verstehe die Doku nicht ganz.
Was macht die Methode keySet?
 

Devanther

Top Contributor
ausgaenge ist eine HashMap, die sich in der Superklasse befindet.
protected HashMap<String, Raum> ausgaenge;
In der Unterklasse greifen wir darauf zu.

Mit der Methode put tun wir einen String und einen Raum in die HashMap. (Schlüssel/Wert) / (Keys/Values)
Über den String kann man auf den Raum zugreifen.
Mit der Methode .keySet() holen wir aus der HashMap die Keys und das wird in der Variablen keys gespeichert.

Und später holen wir mit der Methode keys.get() die Keys die in der Variablen zufaelligerRaum gespeichert und
zurückgegeben werden.

Ist das richtig?
Ich glaube ich habe die Funktion einer HashMap immer noch nicht richtig verstanden.
ausgaenge.get() was macht diese Methode?

 

krgewb

Top Contributor
get(Object key) holt einen Wert zu dem der Schlüssel bekannt ist.

Bei einer HashMap macht es (fast) keinen Unterschied, ob nur ein Element gespeichert wird oder ob eine Millarde Elemente gespeichert werden. Ein Wert (von dem der Schlüssel bekannt ist) kann also superschnell gefunden werden.

Als Schlüssel verwendet man typischerweise eine ID.
Außerdem gibt es keine feste Reihenfolge wie z.B. bei einer ArrayList. Bei HashMap und auch bei HashSet gibt es keine Indizes. Zudem kann es in einer Hashmap und in einem HashSet keine doppelten Einträge geben.

Einen Index gibt es nicht. Deshalb wird in deinem Beispiel das Set mit den Schlüsseln in einer ArrayList hinterlegt. Dort gibt es Indizes und deshalb kann man einen Zufallszahlengenerator anwenden.
 
Zuletzt bearbeitet:

Devanther

Top Contributor
Code:
package paket1;


import java.util.HashMap;

public class HashMapDemo {
    private static HashMap<String, ObjektDemo> hm2;
    public static void hashMapTest(){
        hm2 = new HashMap<String, ObjektDemo>();
        hm2.put("1", new ObjektDemo("Jack",20));
        hm2.put("2", new ObjektDemo("Mark",22));
        hm2.put("3", new ObjektDemo("Steffie",20));
        hm2.put("4", new ObjektDemo("Olga",19));
        for(ObjektDemo demo : hm2.values()){
            demo.printWerte();
        }
        ObjektDemo o = hm2.get("1");
        o.printWerte();
    }
        public static void main(String[] args) {
        hashMapTest();
    }
}

Code:
package paket1;

public class ObjektDemo {
    
    private String name;
    private int alter;
    public ObjektDemo() {
    }
    public ObjektDemo(String nameK , int alterK) {
        this.setName(nameK);
        this.setAlter(alterK);
    }
    public void setName(String name){
        this.name = name;       
    }
    public void setAlter(int alter){
        this.alter = alter;       
    }
    public void printWerte(){
        System.out.println("Name "+name+", Alter "+alter+".");
    }
}

Hier gibt es auch in einer HashMap eine Reihenfolge auf die man zugreifen kann!
 

Robat

Top Contributor
Da bedeutet aber nicht, dass das Key-Value-Paar in der Map an Stelle 1 steht. Du sagst ja nicht "gib mir das erste Element" sondern "gib mir den Value zum Key "1"".
 

Devanther

Top Contributor
Code:
private Position findeNahrung()
    {
        Feld feld = gibFeld();
        List<Position> nachbarPositionen =
                               feld.nachbarpositionen(gibPosition());
        Iterator<Position> iter = nachbarPositionen.iterator();
        while(iter.hasNext()) {
            Position pos = iter.next();
            Object tier = feld.gibObjektAn(pos);
            if(tier instanceof Hase) {
                Hase hase = (Hase) tier;
                if(hase.istLebendig()) {
                    hase.sterben();
                    futterLevel = HASEN_NAEHRWERT;
                    return pos;
                }
            }
        }
        return null;
    }

if(tier instanceof Hase) {
Hase hase = (Hase) tier;

Ich wollte fragen, was da gemacht wird.
Wenn tier = Hase ist oder
tier = Unterklasse von Hase wird true zurückgeliefert.
Es wird geprüft ob Hase eine Instanz von tier ist.
Ist das richtig?
Was passiert danach?
Ist das eine Typumwandlung? Hase wird in tier umgewandelt?
Ich verstehe den Sinn dahinter nicht.
 

Devanther

Top Contributor
if(tier instanceof Hase) {
Hase hase = (Hase) tier;


Kann mir jemand das erklären?
Wird geprüft ob Hase eine Instanz von tier ist oder umgekehrt?
Im Buch steht, dass tier = Hase sein müsste...aber eigentlich muss es doch umgekehrt sein, dass
Hase tier ist. tier ist ja die Superklasse.
 

SchwarzWeiß

Bekanntes Mitglied
Java:
Object tier = feld.gibObjektAn(pos);
if(tier instanceof Hase) {
Hase hase = (Hase) tier;

Zum Erklären ist noch die Zeile darüber wichtig.
Egal was bei feld.gibObjektAn(pos) passiert, das Objekt tier kann nur die Methoden, welche die Klasse Object kann (toString() etc.). Auch wenn feld.gibObjektAn(pos) eine Instanz der Klasse Hase zurückgibt. Wir müssen es also Casten, das passiert in der letzten Zeile. Das Objekt hase kennt nun alle Methoden der Klasse Hase, da wir den Datentyp von Object auf Hase umgewandelt haben. Das funktioniert aber nur, wenn das Objekt tier auch wirklich von der Klasse Hase (oder einer davon erbendenden Klasse) ist. Deswegen die instanceof-Abfrage. Wenn diese Abfrage wahr ist, wissen wir sicher, dass tier von der Klasse Hase ist, so dass beim Cast auch kein Laufzeitfehler auftreten kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 2
0 Was bedeutet dieser Generic-code? Java Basics - Anfänger-Themen 3
N Was bedeutet dieser Fehler Java Basics - Anfänger-Themen 2
P Was bedeutet dieser Fehler? Java Basics - Anfänger-Themen 31
S Was bedeutet dieser ausdruck? Java Basics - Anfänger-Themen 9
onlyxlia Was bedeutet das @Override? Java Basics - Anfänger-Themen 1
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
S Was bedeutet ungleich (in diesem Zusammenhang)? Java Basics - Anfänger-Themen 2
S Was bedeutet das Zeichen := Java Basics - Anfänger-Themen 9
H Was bedeutet das: [I@7d4991ad? Java Basics - Anfänger-Themen 20
MiMa Was bedeutet unchecked or unsafe operations? Java Basics - Anfänger-Themen 6
ZH1896ZH OOP Verstehe nicht was der Hinweis bedeutet, bitte um Hilfe! Java Basics - Anfänger-Themen 2
O Was bedeutet das hier 999_983? Java Basics - Anfänger-Themen 2
D Was bedeutet diese Schreibweise? Java Basics - Anfänger-Themen 9
W Was bedeutet im Struktogramm „zufall“ aufrufen (keine Parameterübergabe)? Java Basics - Anfänger-Themen 8
R Was bedeutet -1 Java Basics - Anfänger-Themen 2
V OOP Was bedeutet das "aBruch" Java Basics - Anfänger-Themen 6
U Was bedeutet $@ in der Linux Kommandozeile Java Basics - Anfänger-Themen 3
dave253 Was bedeutet (String args[])? Java Basics - Anfänger-Themen 6
D was bedeutet this. bei Konstruktoren? Java Basics - Anfänger-Themen 4
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
G Methoden Was bedeutet return in einer Methode Java Basics - Anfänger-Themen 5
V Was bedeutet das? Java Basics - Anfänger-Themen 4
G zeile: Was bedeutet das in der Methode? Java Basics - Anfänger-Themen 4
Y Was bedeutet "this" ohne dem Punkt und dem Atrributnamen danach? Java Basics - Anfänger-Themen 2
M was bedeutet setEnabled Java Basics - Anfänger-Themen 12
F Was bedeutet '@'? Java Basics - Anfänger-Themen 3
F Frage von einem Neuling: Was bedeutet Scanner scanner ? Java Basics - Anfänger-Themen 5
K Schlüsselworte Was bedeutet oder was ist die SIGNATUR?? Java Basics - Anfänger-Themen 4
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
A Was bedeutet der Operator *= ? Java Basics - Anfänger-Themen 2
N Was bedeutet << Java Basics - Anfänger-Themen 5
G Was bedeutet diese Zeile? Java Basics - Anfänger-Themen 2
J Was bedeutet This. ? Java Basics - Anfänger-Themen 4
D Was genau bedeutet und bewirkt dieses @override? Java Basics - Anfänger-Themen 15
J Was bedeutet dieses a [i].length? Java Basics - Anfänger-Themen 3
D Was bedeutet < > Java Basics - Anfänger-Themen 4
D Was bedeutet das ?: Java Basics - Anfänger-Themen 9
B Was bedeutet static<T>?? Java Basics - Anfänger-Themen 6
php1 Was bedeutet der Modifier static ? Java Basics - Anfänger-Themen 3
K Was bedeutet das eigentlich.... Java Basics - Anfänger-Themen 18
G Was bedeutet? Java Basics - Anfänger-Themen 7
G Was bedeutet charAt()? Java Basics - Anfänger-Themen 5
J Was bedeutet der Doppelpunkt ":" ? Java Basics - Anfänger-Themen 3
G was bedeutet //TODO Java Basics - Anfänger-Themen 4
A Was bedeutet folgende Programmcodezeile genau Java Basics - Anfänger-Themen 6
B was bedeutet "this" Java Basics - Anfänger-Themen 8
L Was bedeutet das Wort "this" ? Java Basics - Anfänger-Themen 2
K was bedeutet '?' Java Basics - Anfänger-Themen 3
R Was bedeutet diese Zeile. Java Basics - Anfänger-Themen 8
S was bedeutet Typisiert? Java Basics - Anfänger-Themen 3
D Was bedeutet : ? Java Basics - Anfänger-Themen 4
M public static void main(String... args)<- Was bedeutet das? Java Basics - Anfänger-Themen 5
H Was bedeutet "class Liste<E>" Java Basics - Anfänger-Themen 2
J was bedeutet null Java Basics - Anfänger-Themen 7
padde479 Compiler-Frage: Was bedeutet deprecated? Java Basics - Anfänger-Themen 4
P Was genau bedeutet Feld Java Basics - Anfänger-Themen 3
G Was bedeutet diese Fehlermeldung von Tomcat Java Basics - Anfänger-Themen 29
G indexOf() - was bedeutet -1 ? Java Basics - Anfänger-Themen 27
P Was genau bedeutet "public static void main(String[] ar Java Basics - Anfänger-Themen 10
G setName bei JTextfield. Was bedeutet das? Java Basics - Anfänger-Themen 7
B Was bedeutet synchronized? Java Basics - Anfänger-Themen 8
D was bedeutet " Seiteneffekt " ? Java Basics - Anfänger-Themen 4
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
K Warum zeigt dieser reguläre Ausdruck true an? Java Basics - Anfänger-Themen 1
Leo0909 Ich brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 2
P Nutzer entscheiden lassen, wie viele Zahlen dieser in ein Array eingeben möchte. Java Basics - Anfänger-Themen 6
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
Bluedaishi Hilfe beim erklären dieser Methode Java Basics - Anfänger-Themen 5
S Warum dieser Fehler? Java Basics - Anfänger-Themen 1
B Datum in dieser Range SQL? Java Basics - Anfänger-Themen 3
R Dieser Code sagt mir nichts... Java Basics - Anfänger-Themen 4
D Erste Schritte Lösen dieser Aufgabe, Hilfe! Java Basics - Anfänger-Themen 12
J Brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 3
F Wieso wird dieser Befehl nicht ausgeführt? (Anfänger) Java Basics - Anfänger-Themen 2
M Frage, wie dieser Code funktioniert, bzw. weshab er bei mir nicht funktioniert Java Basics - Anfänger-Themen 4
L Hilfe! Was macht dieser Code? Java Basics - Anfänger-Themen 1
V Operatoren Warum kommt nicht das gewünschte Ergebnis dieser Operation? Java Basics - Anfänger-Themen 3
R Gibt es Eine einfache Programierung dieser Methoden Java Basics - Anfänger-Themen 8
G Lastet dieser Code den Arbeitsspeicher eines Handys aus? Java Basics - Anfänger-Themen 7
B Was passiert in dieser Methode? Java Basics - Anfänger-Themen 3
Nicole1989 Was Bewirkt dieser Java Code? Java Basics - Anfänger-Themen 4
B Summe aller Zahlen von 1 bis zu dieser Zahl (ohne while oder for schleife) Java Basics - Anfänger-Themen 4
J Wo liegt nur an dieser einfachen Bedingung mein Fehler? Java Basics - Anfänger-Themen 8
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
C Warum funktioniert dieser Code nicht? Java Basics - Anfänger-Themen 2
A Lässt sich dieser Ausdruck irgendwie einfacher schreiben? Java Basics - Anfänger-Themen 4
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
P Geht dieser Code noch einfacher? Java Basics - Anfänger-Themen 16
G Bitte um Erklärung dieser einer Zeile Java Basics - Anfänger-Themen 5
F OOP Warum funktioniert dieser Regex? Java Basics - Anfänger-Themen 15
P Unterschied dieser 2 code Zeilen Java Basics - Anfänger-Themen 12
StrikeTom Was ist an dieser einfachen funktion falsch? Java Basics - Anfänger-Themen 5
M Wieso funktioniert dieser simple Code nicht? Java Basics - Anfänger-Themen 9
M prozess starten und warten bis dieser sich beendet Java Basics - Anfänger-Themen 3
P Was macht dieser Source code? Java Basics - Anfänger-Themen 5
S OOP Wie muss meine Klasse zu dieser main aussehen? Java Basics - Anfänger-Themen 5
H Wie so ein Exception in dieser HashMap? Java Basics - Anfänger-Themen 7
K Was wird in dieser Frage gemeint ? Java Basics - Anfänger-Themen 15
V Wie und wieso geht dieser Methodenaufruf? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben