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:
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:
Ich hoffe man versteht was mein Problem ist
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