Erste Schritte sehe Fehler bei der while schleife nicht...

Masterman431

Mitglied
Hi Leute,
Ich hab ein kleines Problem. Damit ihr versteht, wovon ich rede, hier erst mal der Quelltext^^

public void start(){
double x;
x = Math.random();

this.ball.setzeMittelpunkt (400, 300);

while(5 > 4){
if(this.bRechts.rh == true){
try{
this.rechts.verschiebenUm(0, -10);
Thread.sleep(80);
}
catch(Exception e){
System.out.println("error");
}
}
else if(this.bRechts.rr == true){
try{
this.rechts.verschiebenUm(0, 10);
Thread.sleep(80);
}
catch(Exception e){
System.out.println("error");
}
}
}


//Anstoß in drei mögliche Richtungen
if( x >= 0.33 && x <= 0.66) {
try{
for(int i=1; i<=10; i=i+1){
Thread.sleep(100);
this.ball.verschiebenUm(34, 0);
}
}

catch(Exception e){
System.out.println("error");
}
}

else if(x > 0.66) {

try{
for(int i=1; i<=10; i=i+1){
this.ball.verschiebenUm(34, 15);
Thread.sleep(100);
}
}
catch (Exception e){
System.out.println("error");
}
}
else {
try{
for(int i=1; i<=10; i=i+1){
this.ball.verschiebenUm(34, -15);
Thread.sleep(100);
}

}
catch (Exception e){
System.out.println("Error");
}
}

Es wird mir angezeigt, dass " if( x >= 0.33 && x <= 0.66) " nicht erfüllt werden kann, was mist ist, da x eine Zufallszahl zwischen 1 u. 0 ist. Ich glaub das Problem liegt bei der While Schleife. wenn ich sie entferne kann BlueJ problemlos compilieren. Hat jemand ne Idee??
 
Java Code bitte in Java-Tags. Dann geht auch die Formatierung nicht flöten.
Warum hast du in deiner while Schleife (5>4) stehen? Wenn du eine Endlosschleife willst, mach das mal lieber über while(true).

Vielleicht liegt es daran, dass x nur einmal definiert wird und danach deine Endlosschleife (Achtung! Endlosschleifen ohne Abbruchbedingung sind böse. Auch wenn du
Code:
Thread.sleep()
verwendest blockieren sie deine GUI. Nimm mal lieber einen richtigen Thread und mach das
Code:
Thread.sleep()
in den Thread) läuft, somit immer dasselbe Ergebnis in x stehen wird.
 
Hallöle,

also um dem auf die schliche zu kommen würde ich auf jeden fall mal system.outs machen von x, auch mal ohne schleife um zu sehen was da überhaupt drinne steht. Baue mal eine endlosschleife drumherum und lasse dir mal 50 Werte rausgeben von x.

So wie ich sehe frägst du auch in den bedingungen ab ob rechts.bh == true. Wenn das boolean Werte sind, so wie es hier ja eindeutig ausschaut, dann frage lieber If(rechts.bh) oder if(!rechts.bh).

Ob true == true ist verwirrt etwas.

Zur Schleife, du sagst x erhält einen Wert von 0 oder 1 ???, dann könnte die Schleife tatsächlich nicht erfüllt werden denn x wird nie zwischen 0,33 UND 0,66 liegen ( Prüfe auf jedenfall mal wie x ausschaut, kommazahl, ganzzahl, wäre das was mir jetzt einfallen würde aufgrund der Fehlermeldung ).

Ich hoffe ich konnte Dir etwas bei der fehlersuche helfen.

Grüsse Breas

-- Wer Rechtschreibfehler findet, darf sie gerne behalten -- :bae:
 
Es liegt daran, dass du eine Endlosschleife produziert hast mit [c]while(5 > 4) {[/c].
Das erkennt der Compiler und sagt deshalb dass der komplette Code danach nicht erreichbar ist.
Die Schleife endet nämlich direkt vor dem [c]if (x >= 0.33 && x <= 0.66) {[/c].
 
Erst mal danke für die vielen Antworten. Um auf eure Vermutungen zu kommen, dass das x das Problem ist. x ist eine Zufallszahl zwischen 1 u. 0. Also z.B 0.5. Dadurch kann die Bedingung sehr wohl erfüllt werden. Die while schleife hab ich erst nach derm x-Teil eingefügt. Davor hat der x-teil wunderbar funktioniert. Wenn ich den x- Teil rausnehme, wird einfach der nächste teil als "unreachable statement" markiert, was bei mir eine Deklaration einer lokalen Variable währe. Das macht natürlich überhaupt keinen Sinn. Ich hab 5>4 durch true ersetzt, das Problem existiert jedoch immernoch. Egal, was ich nach der Whil Schleife schreibe, wird mir als unreachable statement markiert. Es wurde gesagt, dass while schleifen ohne Abbruchbedingung schlecht sind. Wie kann man diese einbauen?
 
Moin,

Die while schleife hab ich erst nach derm x-Teil eingefügt. Davor hat der x-teil wunderbar funktioniert. Wenn ich den x- Teil rausnehme, wird einfach der nächste teil als "unreachable statement" markiert, was bei mir eine Deklaration einer lokalen Variable währe. Das macht natürlich überhaupt keinen Sinn. Ich hab 5>4 durch true ersetzt, das Problem existiert jedoch immernoch. Egal, was ich nach der Whil Schleife schreibe, wird mir als unreachable statement markiert. Es wurde gesagt, dass while schleifen ohne Abbruchbedingung schlecht sind. Wie kann man diese einbauen?
Bitte formatiere Deine Code in CodeTags ..... so wird sich das kaum einer anschauen willen !!

Ein unreachable statement deutet in der Regel auf Fehler bei der Klammerung hin! Mit entsprechender Formatierung dürfstest wohlö selbst erkennen, wo eine fehlt oder eine obsolet ist!

Zudem gilt durchaus das, was antiheld schrieb: durch die Endlosschleife (egal ob "while true" oder "while (5>4)", was ja auch immer true ist) wirst Du Dein if NIE erreichen !

Gruß
Klaus
 

Zurück
Oben