Finde meinen Fehler in einer Methode nicht, Java Karol

marcelnedza

Mitglied
Hi zusammen, ich habe mal wieder ein kleines Problem.
Ich habe die Aufgabe zwei Roboter zu generieren welche sich in einer kleinen Welt suchen, bei Sichtkontakt soll die Laufsequenz beendet werden und der Roboter der Sicht kontakt aufgenommen hat soll auf den anderen zulaufen und bei Kontakt eine Begrüßung ausgeben mitsamt der Kennung des anderen.
Funktioniert soweit auch gut und zuverlässig sofern der Roboter mit dem Indizes 0 (Roboter 1) im Array derjenige ist der Sichtkontakt aufgenommen hat.
Wenn Indizes 1 (Roboter 2) Sichtkontakt hat, läuft er auf den anderen zu aber sobald er vor ihm steht kommt anstatt einer Meldung und dem Programm stopp nichts und es geht weiter bis Roboter 1 ihn gefunden hat.

Ich vermute stark es hat was hiermit zu tun:

Java:
 while (programm.RoboterSuchen(arr) == false) {

                programm.RoboterSuchen(arr);

            }

Wenn Roboter 2 (also der zweite durchlauf der for-Schleife in der RoboterSuchen Methode) dran ist, wird bei direktkontakt vermutlich nicht auf true gesetzt trotz return true;


Hier die zwei Klassen die ich geschrieben habe:

Java:
import javakarol.*;

public class mainclass {

    public static void main(String[] args) {
        int x = 0;
        int y = 0;
        Welt welt1 = new Welt("E:/Abschlussaufgabe/bin/meeting.kdw");
        Roboter[] arr = new Roboter[2];

        int z = 0;

        while (z == 0) {

            try {
                for (;;) {
                    int i = 0;
                    while (i < 2) {

                        x = programm.positionxVergeben(x);
                        y = programm.positionyVergeben(y);

                        Roboter karol = new Roboter(x, y, 'S', welt1);
                        arr[i] = karol;
                        i++;

                    }

                    if (i == 2) {
                        break;
                    }

                }
                z = 1;
            } catch (java.lang.RuntimeException e) {
                System.out.println("An dieser Stelle steht schon ein Quader, neue Position wird ermittelt.");
            }
        }

        try {
            while (programm.RoboterSuchen(arr) == false) {
                programm.RoboterSuchen(arr);
            }
        } catch (java.lang.NullPointerException a) {
            System.out.println("Bitte neu starten.");
        }

    }
}




Java:
import javakarol.*;

public class programm {

    public static int positionxVergeben(int x) {

        int i = 0;

        while (i < 1) {

            x = ((int) (Math.random() * 100)) % 20;

            if (x <= 20) {

                i++;

            }

        }
        return x;
    }

    public static int positionyVergeben(int y) {

        int i = 0;

        while (i < 1) {

            y = ((int) (Math.random() * 100)) % 20;

            if (y <= 20) {

                i++;

            }

        }
        return y;
    }

    public static boolean RoboterSuchen(Roboter[] arr) {

        for (int i = 0; i < 2;i++) {
            try {
                arr[i].Schritt();
                if (arr[i].IstRoboterInSicht() == true) {
                    while (arr[i].IstRoboter() == false) {
                        arr[i].Schritt();
                    }
                    arr[i].MeldungAusgeben("Hab dich Roboter " + arr[i].RoboterVorneKennungGeben() + "!");
                    return true;

                }
            } catch (java.lang.RuntimeException e) {

                int x = (int) (Math.random() * 100);

                if (x % 2 == 0) {
                    arr[i].LinksDrehen();
                } else {
                    arr[i].RechtsDrehen();
                }
                if (arr[i].IstRoboterInSicht() == true) {
                    while (arr[i].IstRoboter() == false) {
                        arr[i].Schritt();
                    }
                    arr[i].RoboterVorneKennungGeben();
                    arr[i].MeldungAusgeben("Hab dich Roboter " + arr[i].RoboterVorneKennungGeben() + "!");
                    return true;

                }
            }

        }
        return false;

    }

}

Ich hoffe man versteht was mein Problem ist
 

MarvinsDepression

Bekanntes Mitglied
Sagt mal, ist das eine ernsthafte Sache hier. Ich kann mir beim besten Willen nicht vorstellen, das ein Anfänger so gezielt Code verkomplizieren kann und bei dem angegebenen Link bringt FF gleich mal eine Warnung.
 

MarvinsDepression

Bekanntes Mitglied
hier wird programm.RoboterSuchen(arr) zwei mal aufgerufen, zuerst im Schleifenkopf, dann nochmals im Schleifenkörper (ohne den Ergebniswert abzufragen).
Java:
while (programm.RoboterSuchen(arr) == false) {
    programm.RoboterSuchen(arr);
}
Es reicht also ganz einfach ein while (!programm.RoboterSuchen(arr)) {}, der Methodenkörper bleibt leer.

Zudem entspricht die Namengebung nicht dem Reglement: Klassennamen beginnen mit einem Großbuchstaben, Methoden-/Variablennamen werden klein geschrieben. -> Erwarten würde man also Programm.roboterSuchen(arr)


dann weiter:

Java:
int z = 0;
while (z == 0) {
    try {
        for (;;) {
            int i = 0;
            while (i < 2) {
                x = programm.positionxVergeben(x);
                y = programm.positionyVergeben(y);

                Roboter karol = new Roboter(x, y, 'S', welt1);
                arr[i] = karol;
                i++;
            }
            if (i == 2) {
                break;
            }
        }
        z = 1;
    } catch (java.lang.RuntimeException e) {
        System.out.println("An dieser Stelle steht schon ein Quader, neue Position wird ermittelt.");
    }
}
ganz ehrlich, wie kommt man auf dermaßen umständlichen Code:
Java:
try {
    for (int i = 0; i < 2; i++) {
        x = programm.positionxVergeben(x);
        y = programm.positionyVergeben(y);

        arr[i] = new Roboter(x, y, 'S', welt1);
    }
} catch (Exception e) {
    System.out.println("An dieser Stelle steht schon ein Quader, neue Position wird ermittelt.");
}
macht genau dass, was Dein Code macht und ist lesbar.
(P.S.: positionxVergeben() und positionyVergeben() sind identisch, da reicht eine)

weiter:

Java:
public static int positionxVergeben(int x) {
    int i = 0;

    while (i < 1) {
        x = ((int) (Math.random() * 100)) % 20;
        if (x <= 20) {
            i++;
        }
    }
    return x;
}
Wozu der Parameter im Methodenkopf? Wozu die Schleife? Wozu mit Modulo??
Es genügt schlicht
Java:
public static int positionxVergeben() {
    return (int) (Math.random() * 20);
}
Und auch der Methodename. Das x sieht man fast nicht, daher vielleicht lieber xPositionVergeben()
(P.S.: positionxVergeben() und positionyVergeben() sind identisch, da reicht eine)

und hier :

Java:
} catch (java.lang.RuntimeException e) {
    int x = (int) (Math.random() * 100);
    if (x % 2 == 0) {
        arr[i].LinksDrehen();
    } else {
        arr[i].RechtsDrehen();
    }
    if (arr[i].IstRoboterInSicht() == true) {
        while (arr[i].IstRoboter() == false) {
            arr[i].Schritt();
        }
        arr[i].RoboterVorneKennungGeben();
        arr[i].MeldungAusgeben("Hab dich Roboter " + arr[i].RoboterVorneKennungGeben() + "!");
        return true;
    }
}

Solcher Code gehört nicht einen catch-Block. Der chatch-Block (catch { ... }) ist nur zur Fehlerbehandlung da, aber nicht zum Steuern des Programm-Ablaufes. Überlege Dir, was eintreten muss, dass eine Drehung nötig wird und wie Du es testen kannst.

zudem:
Java:
int x = (int) (Math.random() * 100);
if (x % 2 == 0) {
    arr[i].LinksDrehen();
    ...
Es genügt if (Math.random()*2 < 1) {
 

temi

Top Contributor
Java:
try {
for (int i = 0; i < 2; i++) {
x = programm.positionxVergeben(x);
y = programm.positionyVergeben(y);

arr[i] = new Roboter(x, y, 'S', welt1);
}
} catch (Exception e) {
System.out.println("An dieser Stelle steht schon ein Quader, neue Position wird ermittelt.");
}
macht genau dass, was Dein Code macht und ist lesbar.
Noch besser wäre es auch hier auf die Exception zur Programmsteuerung zu verzichten und vor der Erzeugung des Roboters zu prüfen, ob die gewünschte Position frei ist. In diesem Fall würde man genau eine Schleife benötigen, die solange läuft, bis zwei Roboter platziert wurden.

EDIT: Es kann allerdings sein, dass dies nicht möglich ist, weil "Welt" keine passende Methode dafür anbietet. :(
 
Zuletzt bearbeitet:

temi

Top Contributor
Java:
int robot = 0;
while (robot < 2) {
    x = programm.positionVergeben();
    y = programm.positionVergeben();

    try {
        arr[robot] = new Roboter(x, y, 'S', welt1);;
        robot++;
    }
  
    catch (java.lang.RuntimeException e) {
        System.out.println("Diese Stelle ist bereits besetzt, eine neue Position wird ermittelt.");
    }
}
 
Zuletzt bearbeitet:

marcelnedza

Mitglied
hier wird programm.RoboterSuchen(arr) zwei mal aufgerufen, zuerst im Schleifenkopf, dann nochmals im Schleifenkörper (ohne den Ergebniswert abzufragen).
Java:
while (programm.RoboterSuchen(arr) == false) {
    programm.RoboterSuchen(arr);
}
Es reicht also ganz einfach ein while (!programm.RoboterSuchen(arr)) {}, der Methodenkörper bleibt leer.

Zudem entspricht die Namengebung nicht dem Reglement: Klassennamen beginnen mit einem Großbuchstaben, Methoden-/Variablennamen werden klein geschrieben. -> Erwarten würde man also Programm.roboterSuchen(arr)


dann weiter:

Java:
int z = 0;
while (z == 0) {
    try {
        for (;;) {
            int i = 0;
            while (i < 2) {
                x = programm.positionxVergeben(x);
                y = programm.positionyVergeben(y);

                Roboter karol = new Roboter(x, y, 'S', welt1);
                arr[i] = karol;
                i++;
            }
            if (i == 2) {
                break;
            }
        }
        z = 1;
    } catch (java.lang.RuntimeException e) {
        System.out.println("An dieser Stelle steht schon ein Quader, neue Position wird ermittelt.");
    }
}
ganz ehrlich, wie kommt man auf dermaßen umständlichen Code:
Java:
try {
    for (int i = 0; i < 2; i++) {
        x = programm.positionxVergeben(x);
        y = programm.positionyVergeben(y);

        arr[i] = new Roboter(x, y, 'S', welt1);
    }
} catch (Exception e) {
    System.out.println("An dieser Stelle steht schon ein Quader, neue Position wird ermittelt.");
}
macht genau dass, was Dein Code macht und ist lesbar.
(P.S.: positionxVergeben() und positionyVergeben() sind identisch, da reicht eine)

weiter:

Java:
public static int positionxVergeben(int x) {
    int i = 0;

    while (i < 1) {
        x = ((int) (Math.random() * 100)) % 20;
        if (x <= 20) {
            i++;
        }
    }
    return x;
}
Wozu der Parameter im Methodenkopf? Wozu die Schleife? Wozu mit Modulo??
Es genügt schlicht
Java:
public static int positionxVergeben() {
    return (int) (Math.random() * 20);
}
Und auch der Methodename. Das x sieht man fast nicht, daher vielleicht lieber xPositionVergeben()
(P.S.: positionxVergeben() und positionyVergeben() sind identisch, da reicht eine)

und hier :

Java:
} catch (java.lang.RuntimeException e) {
    int x = (int) (Math.random() * 100);
    if (x % 2 == 0) {
        arr[i].LinksDrehen();
    } else {
        arr[i].RechtsDrehen();
    }
    if (arr[i].IstRoboterInSicht() == true) {
        while (arr[i].IstRoboter() == false) {
            arr[i].Schritt();
        }
        arr[i].RoboterVorneKennungGeben();
        arr[i].MeldungAusgeben("Hab dich Roboter " + arr[i].RoboterVorneKennungGeben() + "!");
        return true;
    }
}

Solcher Code gehört nicht einen catch-Block. Der chatch-Block (catch { ... }) ist nur zur Fehlerbehandlung da, aber nicht zum Steuern des Programm-Ablaufes. Überlege Dir, was eintreten muss, dass eine Drehung nötig wird und wie Du es testen kannst.

zudem:
Java:
int x = (int) (Math.random() * 100);
if (x % 2 == 0) {
    arr[i].LinksDrehen();
    ...
Es genügt if (Math.random()*2 < 1) {

Hi, erstmal danke für die wirklich sehr ausführliche Antwort!

Es reicht also ganz einfach ein while (!programm.RoboterSuchen(arr)) {}, der Methodenkörper bleibt leer.
Bedeutet die Methode wird auch ohne sie im Körper aufzurufen aufgerufen?

Java:
int z = 0;
while (z == 0) {
    try {
        for (;;) {
            int i = 0;
            while (i < 2) {
                x = programm.positionxVergeben(x);
                y = programm.positionyVergeben(y);

                Roboter karol = new Roboter(x, y, 'S', welt1);
                arr[i] = karol;
                i++;
            }
            if (i == 2) {
                break;
            }
        }
        z = 1;
    } catch (java.lang.RuntimeException e) {
        System.out.println("An dieser Stelle steht schon ein Quader, neue Position wird ermittelt.");
    }
}
ganz ehrlich, wie kommt man auf dermaßen umständlichen Code:
Java:
try {
    for (int i = 0; i < 2; i++) {
        x = programm.positionxVergeben(x);
        y = programm.positionyVergeben(y);

        arr[i] = new Roboter(x, y, 'S', welt1);
    }
} catch (Exception e) {
    System.out.println("An dieser Stelle steht schon ein Quader, neue Position wird ermittelt.");
}
macht genau dass, was Dein Code macht und ist lesbar.
(P.S.: positionxVergeben() und positionyVergeben() sind identisch, da reicht eine)
Nun, im Fall, dass der catch ausgelöst wird noch bevor die beiden Roboter platziert wurden, würde das Programm ohne while(z==0) ja einfach weitergehen, ohne die Roboter zu platzieren, das habe ich damit umgehen wollen da ich bei jedem Start garantieren will, dass alles klappt.

Die zwei Positions Methoden sind natürlich vollkommener schwachsinn, da gebe ich dir absolut recht!

Java:
public static int positionxVergeben(int x) {
    int i = 0;

    while (i < 1) {
        x = ((int) (Math.random() * 100)) % 20;
        if (x <= 20) {
            i++;
        }
    }
    return x;
}
Wozu der Parameter im Methodenkopf? Wozu die Schleife? Wozu mit Modulo??
Es genügt schlicht
Java:
public static int positionxVergeben() {
    return (int) (Math.random() * 20);
}
Und auch der Methodename. Das x sieht man fast nicht, daher vielleicht lieber xPositionVergeben()
(P.S.: positionxVergeben() und positionyVergeben() sind identisch, da reicht eine)

Die fertige Welt die ich für meine Aufgabe bekommen habe hat numal die Maße 20x20, deshalb muss die Zahl die an den Konstruktor übergeben wird im Wertebereich 1 bis 20 liegen, deshalb die Schleife!

Zum Methodennamen kann ich nichts sagen, wie o.g., ich werde das korrigieren xD

Es genügt if (Math.random()*2 < 1) {

Ist natürlich smart, wird so übernommen!


Nochmal danke für die vielen Tipps und entschuldige wenn es dich aufgeregt hat, schien ein wenig so. Versuche dich nur ein bisschen in Nachsicht zu üben, ich bin nur ein Mechatronik Student der ein Semester lang mit Java überrollt wurde und dem jetzt ein Programm abverlangt wird von dem er nicht weiß wo hinten und vorne ist!
 

MarvinsDepression

Bekanntes Mitglied
Bedeutet die Methode wird auch ohne sie im Körper aufzurufen aufgerufen?
Ja, unbedingt. Das ist sogar gängige Praxis. Auch wenn man (nur) den Rückgabewert wissen will, wird die Methode trotzdem komplett abgearbeitet. Der Methode ist es schlicht egal, ob der Returnwert interessiert.

---
Code:
try {
    for (int i = 0; i < 2; i++) {
        x = programm.positionxVergeben(x);
        y = programm.positionyVergeben(y);

        arr[i] = new Roboter(x, y, 'S', welt1);
    }
} catch (Exception e) {
    System.out.println("An dieser Stelle steht schon ein Quader, neue Position wird ermittelt.");
}
Richtig, hier habe ich selber einen Fehler eingebaut und sie Hierarchie des for- und try-Blocks vertauscht.
Richtig ginge es mit dem Beispiel aus dem Post #10

---
Die fertige Welt die ich für meine Aufgabe bekommen habe hat numal die Maße 20x20, deshalb muss die Zahl die an den Konstruktor übergeben wird im Wertebereich 1 bis 20 liegen, deshalb die Schleife!
Nun, aber x modulo 20 liefert bei positiven x stets ein Ergebnis von 0 bis 19 (beides inclusive), aber niemals 20.
(int) (Math.random() * 20) liefert genau das selbe Intervall, also einen Integerwert [0 .. 19]. In der Mathematik spricht man auch von einem rechts offenen Intevall [0 ..20[. Die offene Klammer rechts besagt, das diese Grenze nicht mehr zur Menge dazugehört. In Java ist dieses Prinzip sehr häufig umgesetzt und sollte stets beachtung finden.

---

und entschuldige wenn es dich aufgeregt hat, schien ein wenig so
Ja sorry. Tut mir leid. Ich schiebe es mal auf meine Tabletten 🤣
 

marcelnedza

Mitglied
Ja, unbedingt. Das ist sogar gängige Praxis. Auch wenn man (nur) den Rückgabewert wissen will, wird die Methode trotzdem komplett abgearbeitet. Der Methode ist es schlicht egal, ob der Returnwert interessiert.

---
Code:
try {
    for (int i = 0; i < 2; i++) {
        x = programm.positionxVergeben(x);
        y = programm.positionyVergeben(y);

        arr[i] = new Roboter(x, y, 'S', welt1);
    }
} catch (Exception e) {
    System.out.println("An dieser Stelle steht schon ein Quader, neue Position wird ermittelt.");
}
Richtig, hier habe ich selber einen Fehler eingebaut und sie Hierarchie des for- und try-Blocks vertauscht.
Richtig ginge es mit dem Beispiel aus dem Post #10

---

Nun, aber x modulo 20 liefert bei positiven x stets ein Ergebnis von 0 bis 19 (beides inclusive), aber niemals 20.
(int) (Math.random() * 20) liefert genau das selbe Intervall, also einen Integerwert [0 .. 19]. In der Mathematik spricht man auch von einem rechts offenen Intevall [0 ..20[. Die offene Klammer rechts besagt, das diese Grenze nicht mehr zur Menge dazugehört. In Java ist dieses Prinzip sehr häufig umgesetzt und sollte stets beachtung finden.

---


Ja sorry. Tut mir leid. Ich schiebe es mal auf meine Tabletten 🤣
Keine Sorge, verstehe die Aufregung absolut, ich denk mir würde es nicht anders gehen wenn mir einer was grenzdebiles vorlegen würde.
Ich habe jetzt alles korrigiert und auch einen Weg gefunden, den Programmlauf ohne try-catch Block zu steuern, das schien mir in "V1" einfach einfacher!


Hier nochmal die beiden fertigen Codes die ich so auch bei meinem Prof einsende, wenn es doch noch was zu korrigieren gibt dann nur her damit, ich will ja lernen!

Java:
import javakarol.*;

public class mainclass {

    public static void main(String[] args) {
        int x = 0;
        int y = 0;
        Welt welt1 = new Welt("E:/Abschlussaufgabe/bin/meeting.kdw");
        Roboter[] arr = new Roboter[2];

        int robot = 0;
        while (robot < 2) {
            x = programm.positionVergeben(x);
            y = programm.positionVergeben(x);

            try {
                arr[robot] = new Roboter(x, y, 'S', welt1);
                ;
                robot++;
            }

            catch (java.lang.RuntimeException e) {
                System.out.println("Diese Stelle ist bereits besetzt, eine neue Position wird ermittelt.");
            }
        }

        try {
            while (programm.roboterSuchen(arr) == false) {
            }
        } catch (java.lang.NullPointerException a) {
            System.out.println("Bitte neu starten.");
        }

    }
}

---------------------------------------------------------------------------------------------------

Java:
public class programm {

    public static int positionVergeben(int x) {

        int i = 0;

        while (i < 1) {

            x = ((int) (Math.random() * 20));

            if (x <= 20) {

                i++;

            }

        }
        return x;
    }

    public static boolean roboterSuchen(Roboter[] arr) {

        for (int i = 0; i < 2; i++) {

            if (arr[i].IstWand() == false) {

                arr[i].Schritt();
                if (arr[i].IstRoboterInSicht() == true) {
                    while (arr[i].IstRoboter() == false) {
                        arr[i].Schritt();
                    }
                    arr[i].MeldungAusgeben("Hab dich Roboter " + arr[i].RoboterVorneKennungGeben() + "!");
                    return true;
                }

            } else {

                if (Math.random() * 2 < 1) {
                    arr[i].LinksDrehen();
                } else {
                    arr[i].RechtsDrehen();
                }
                if (arr[i].IstRoboterInSicht() == true) {
                    while (arr[i].IstRoboter() == false) {
                        arr[i].Schritt();
                    }
                    arr[i].RoboterVorneKennungGeben();
                    arr[i].MeldungAusgeben("Hab dich Roboter " + arr[i].RoboterVorneKennungGeben() + "!");
                    return true;
                }

            }

            // Alte Version

            /*
             *
             * try { arr[i].Schritt(); if (arr[i].IstRoboterInSicht() == true) { while
             * (arr[i].IstRoboter() == false) { arr[i].Schritt(); }
             * arr[i].MeldungAusgeben("Hab dich Roboter " +
             * arr[i].RoboterVorneKennungGeben() + "!"); return true;
             *
             * } } catch (java.lang.RuntimeException e) {
             *
             * int x = (int) (Math.random() * 100);
             *
             * if (x % 2 == 0) { arr[i].LinksDrehen(); } else { arr[i].RechtsDrehen(); } if
             * (arr[i].IstRoboterInSicht() == true) { while (arr[i].IstRoboter() == false) {
             * arr[i].Schritt(); } arr[i].RoboterVorneKennungGeben();
             * arr[i].MeldungAusgeben("Hab dich Roboter " +
             * arr[i].RoboterVorneKennungGeben() + "!"); return true;
             *
             * } }
             */

        }
        return false;

    }

}


Danke nochmal an alle beteiligten, ich habe einiges gelernt und hoffe ihr werdet auch in Zukunft trotz meiner dummen Fehler hilfsbereit sein!
 

MarvinsDepression

Bekanntes Mitglied
Ein paar Dinge sind noch immer unschön bzw. unnötig kompliziert. Ich habe Deine Zeilen mal abgeändert und an den entscheidenden Stellen kommentiert.
Natürlich finden sich noch mehr Sachen, die ich anders machen würde und andere ganz anders...
Wichtig ist, das der Code a) funktioniert und b) lesbar ist.

Java:
import javakarol.*;

public class MainClass { // Klassen schreibt man groß !!
    
    
    public static void main(String[] args) {
        // int x = 0; // kannst Du weiter unten deklarieren, wird ja nur innerhalb
        // int y = 0; // der Schleife verwendet.
        Welt welt1 = new Welt("E:/Abschlussaufgabe/bin/meeting.kdw");
        Roboter[] arr = new Roboter[2]; // "arr" ist nichtssagend. Wähle sprechende Namen,
                    // hier z.B. "roboter", dann wird im nachfolgenden Code auch verstanden,
                    // was "roboter[i]" bedeutet
        
        int robot = 0;
        while (robot < 2) {
            // hier wird x und y deklariert
            int x = Programm.positionVergeben(20); // 20 als Breite
            int y = Programm.positionVergeben(20); // 20 als Höhe
            
            try {
                arr[robot] = new Roboter(x, y, 'S', welt1);
                ; // ;  leeres Statement, kann weg
                robot++;
            }
            
            catch (java.lang.RuntimeException e) {
                System.out.println("Diese Stelle ist bereits besetzt, eine neue Position wird ermittelt.");
            }
        }
        
        try {
            while (Programm.roboterSuchen(arr) == false) {}
        } catch (java.lang.NullPointerException a) {
            System.out.println("Bitte neu starten.");
        }
    }
    
}

Java:
import javakarol.*;

public class Programm { // Klassen schreibt man groß !!

    // hier habe ich dem Parameter einen Sinn gegeben. Die Methode wird dadurch flexibler und
    // und kann in Abhängigkeit von "obergrenze" verschieden große Intervalle abdecken
    public static int positionVergeben(int obergrenze) {
        return (int) (Math.random() * obergrenze); // Ergebnismenge -> [0 .. obergrenze-1]
    }
    
    public static boolean roboterSuchen(Roboter[] arr) {

        for (int i = 0; i < 2; i++) {
            
            // doppelten Code vermeiden.
            
            // zuerst gehen oder drehen,
            if (arr[i].IstWand() == false) {
                arr[i].Schritt();
            }
            else {
                if (Math.random() * 2 < 1) {  // noch kürzer "if (Math.random() < 0.5)"
                    arr[i].LinksDrehen();
                } else {
                    arr[i].RechtsDrehen();
                }
            }
            
            // dann ausschau halten
            if (arr[i].IstRoboterInSicht() == true) {
                while (arr[i].IstRoboter() == false) {
                    arr[i].Schritt();
                }
                arr[i].MeldungAusgeben("Hab dich Roboter " + arr[i].RoboterVorneKennungGeben() + "!");
                return true;
            }
        }
        return false;
    }
}

// Warum diese beiden Methoden in eine eigene Klasse???
// Sie könnten genausogut in der "mainclass" Platz finden und wären dort auch gut
// aufgehoben. 
// Aber ich kenne auch die genaue Aufgabenstellung nicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
A Kalender programmieren, ich finde meinen Fehler nicht. Java Basics - Anfänger-Themen 9
V finde meinen Fehler nicht Java Basics - Anfänger-Themen 10
V Ganz kurze Java-Hilfe - Ich finde meinen Fehler nicht Java Basics - Anfänger-Themen 4
C Finde meinen Fehler nicht Java Basics - Anfänger-Themen 6
R Finde meinen Fehler nicht! - Namen von Personen vergleichen Java Basics - Anfänger-Themen 6
G Wie finde ich das Verzeichnis von meinen Java Projekt? Java Basics - Anfänger-Themen 7
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
B ArrayIndexOutOfBoundsException, ich finde den Fehler nicht? Java Basics - Anfänger-Themen 10
Z Montageberechnungs programm, finde leider den Fehler nicht Java Basics - Anfänger-Themen 13
S Finde den fehler nicht Java Basics - Anfänger-Themen 1
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
M Methoden Fehler und finde die Lösung nicht wirklich Java Basics - Anfänger-Themen 6
T Input/Output Leerzeilen in Ausgabe -> finde den Fehler nicht Java Basics - Anfänger-Themen 10
Z Finde den Fehler nicht ! Java Basics - Anfänger-Themen 3
X Finde die Files über FTP nicht Java Basics - Anfänger-Themen 4
T Wie finde ich passende Java Klassen & Methoden? Java Basics - Anfänger-Themen 4
S Compiler-Fehler Finde den Fehler nicht... Java Basics - Anfänger-Themen 4
L Methoden Finde Secquenz ineinem array Java Basics - Anfänger-Themen 12
S Compiler-Fehler error: ';' expected (finde Fehler nicht) Java Basics - Anfänger-Themen 10
O Verriegeln, aber wo? Finde den Client der zu schließem ist. Java Basics - Anfänger-Themen 0
D Code Fehlerhaft finde den Fehler nicht. Java Basics - Anfänger-Themen 1
Farbenfroh Exceptions Anfänger - Finde Fehler nicht Java Basics - Anfänger-Themen 7
R Finde den Fehler nicht Java Basics - Anfänger-Themen 4
A finde fehler nicht Java Basics - Anfänger-Themen 9
X StackOverflowError, finde den Fehler nicht Java Basics - Anfänger-Themen 5
M Methoden Fehler in Methode - Finde ihn nicht Java Basics - Anfänger-Themen 7
P Benötige Hilfe - finde Fehler nicht. Java Basics - Anfänger-Themen 3
J "ArrayIndexOutOfBoundsException", finde den Fehler schlicht nicht Java Basics - Anfänger-Themen 6
D Wo finde ich die OpenSource-Sources? Java Basics - Anfänger-Themen 5
B Finde BUG nicht... Java Basics - Anfänger-Themen 8
L StackOverFlow, finde Grund nicht! Java Basics - Anfänger-Themen 5
M Ganz einfaches Beispiel, finde den Fehler aber nicht :( Java Basics - Anfänger-Themen 2
Z Problem mit Tutorial - Finde Kon.java nicht Java Basics - Anfänger-Themen 11
J Finde Fehler bei kleinem Programm nicht Java Basics - Anfänger-Themen 3
B Wie finde ich Exceptions? Java Basics - Anfänger-Themen 19
S Out of bounds exception. Finde den fehler nicht Java Basics - Anfänger-Themen 13
U finde fehler nicht! bitte um hilfe Java Basics - Anfänger-Themen 8
C ich finde den fehler nicht Java Basics - Anfänger-Themen 4
J Finde die Fehler nicht Java Basics - Anfänger-Themen 2
L Illegal Start of Type, wie finde ich den fehler Java Basics - Anfänger-Themen 4
M Finde Fehler nicht: NotSerializableException Java Basics - Anfänger-Themen 2
F Finde den Fehler nicht Java Basics - Anfänger-Themen 4
J class, interface, or enum expected - finde Fehler nicht. Java Basics - Anfänger-Themen 4
E Finde Error nciht Java Basics - Anfänger-Themen 3
U Finde den fehler nicht Java Basics - Anfänger-Themen 9
J Kann den fehler nicht finde!!! Java Basics - Anfänger-Themen 7
B Calculator Fehlermeldung ich finde aber nichts? Java Basics - Anfänger-Themen 2
S Finde den Fehler nicht/ verstehe Anweisung nicht Java Basics - Anfänger-Themen 12
S Finde den Fehler nicht ! Java Basics - Anfänger-Themen 8
K class Enum Methode: values() - finde ich nicht in der API Java Basics - Anfänger-Themen 2
W Java Anfänger... Finde fehler nicht Java Basics - Anfänger-Themen 11
B Java programm mit Arrays. finde den Fehler nicht Java Basics - Anfänger-Themen 3
U Finde den fehler nicht Java Basics - Anfänger-Themen 10
U Finde den fehler nicht Java Basics - Anfänger-Themen 6
A Finde javax.servlet.* nicht Java Basics - Anfänger-Themen 6
F Finde fehler nicht Java Basics - Anfänger-Themen 5
N finde die fehler nicht Java Basics - Anfänger-Themen 9
G Bild wird nicht neu gezeichnet - finde den Fehler nicht Java Basics - Anfänger-Themen 3
G wie finde ich workspace programmatisch? Java Basics - Anfänger-Themen 13
S Finde den Fehler nicht Java Basics - Anfänger-Themen 13
H Finde Position Java Basics - Anfänger-Themen 4
J wo finde ich javah Java Basics - Anfänger-Themen 16
B wo finde ich diese Dateien? Java Basics - Anfänger-Themen 6
B Wo finde ich die Klasse javax.sound.sampled.AudioSystem Java Basics - Anfänger-Themen 7
G wie finde ich den pfad meines programms raus? Java Basics - Anfänger-Themen 2
T ArrayIndexOutOfBoundsException finde den Auslöser nicht Java Basics - Anfänger-Themen 5
O problem mit document listener finde den fehler nicht Java Basics - Anfänger-Themen 2
O arrayindexoutofbounds finde den fehler nicht Java Basics - Anfänger-Themen 6
B Finde das Problem nicht! Java Basics - Anfänger-Themen 2
M Finde den Fehler nicht Java Basics - Anfänger-Themen 3
B Finde Methode einer Klasse nicht Java Basics - Anfänger-Themen 4
N Finde Fehler nicht! Help plz! Java Basics - Anfänger-Themen 3
F Kleiner Fehler, den ich aber leider nicht finde. Java Basics - Anfänger-Themen 4
F Erste Schritte in Java - Wo finde ich Antworten? Referenzbib Java Basics - Anfänger-Themen 3
B Wo finde ich eine Übersicht aller Methoden? Java Basics - Anfänger-Themen 2
J wo finde ich die methode addactionlistener in der api ? Java Basics - Anfänger-Themen 5
G Bitte meinen Account löschen Java Basics - Anfänger-Themen 1
R Ich sehe meinen fehler nicht Java Basics - Anfänger-Themen 8
Lukasbsc Wie kann ich meinen Code optimieren? Java Basics - Anfänger-Themen 4
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
S Bewertet meinen Code - Part 1 Java Basics - Anfänger-Themen 8
N Ich weiß nicht, wie ich meinen Code richtig designen soll und komme nicht weiter Java Basics - Anfänger-Themen 4
E Input/Output Kann jemand meinen Code durchschauen? Java Basics - Anfänger-Themen 4
R Erste Schritte Verkettete Liste will einfach nicht in meinen Schädel Java Basics - Anfänger-Themen 11
S OOP Sachen aus meinen getMethoden ausgeben lassen `??? Java Basics - Anfänger-Themen 3
E Input/Output Konsole erkennt meinen Buchstaben nicht Java Basics - Anfänger-Themen 12
H Input/Output ImageIO.load frisst meinen ganzen Speicher weg! Java Basics - Anfänger-Themen 4
I SwingUtilities.invokeLater - Wie verwenden für meinen Code? Java Basics - Anfänger-Themen 4
T Erste Schritte Fragen zu meinen kleinen Programm Java Basics - Anfänger-Themen 9
A Wie kann ich meinen Code verbessern? Java Basics - Anfänger-Themen 17
P Bekomme in meinen JPanel nur eine JComponente angezeigt Java Basics - Anfänger-Themen 7
S Hilfe es frisst meinen RAM! Java Basics - Anfänger-Themen 5
C Reference - wird gegen meinen Willen - auf null gesetzt Java Basics - Anfänger-Themen 2
J problem (kann meinen Code nicht kompilieren) Java Basics - Anfänger-Themen 3
C wie bekomm ich ein animiertes .gif bild in meinen JPanel Java Basics - Anfänger-Themen 2
J Wie installiere ich die api index.html in meinen java editor Java Basics - Anfänger-Themen 4
B bitte mal meinen adressbuch-code checken Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben