cannot be resolved to a variable?
Halli Hallo,
ich bin ganz neu dabei programmieren zu lernen.
Und nun bin ich zum wiederholtem male auf einen Fehler gestoßen, der wohl ziemlich simple ist, ich aber nicht darauf komme.
In Zeile 23 gibt es mir den Fehler: "würfel cannot be resolved to a variable"
Ich will doch nur überprüfen, ob die variable würfel, welche zufällig generiert wird, einer 6 entspricht.
Kann mir jemand ohne große Fachbegriffe mal erklären, wo mein Fehler ist?
Vielen Dank schon mal vorab.
7 Antworten
Bitte füge deinen Code doch nächstes mal als Codebeispiel ein, sodass man nicht alles abtippen muss, um dir anhand einer Korrektur deinen Fehler zu erklären.
int wuerfel;
do {
wuerfel = (int)(1+Math.random()*6);
if( wuerfel != 6 ){
System.out.println( "Der Würfel zeigt die Zahl "+wuerfel );
} else {
System.out.println( "Du hast ... würfeln." );
}
} while( wuerfel == 6 );
Die Variable wuerfel muss also außerhalb des do-Blocks definiert sein.
Alternative Lösung mit einer Methode:
public void wuerfeln(){
int augenzahl = (int)(1+Math.random()*6);
System.out.println( "Du hast eine "+augenzahl+" gewürfelt." );
if( augenzahl == 6 ){
System.out.println( "Du darfst noch einmal würfeln." );
this.wuerfeln();
}
}
Die Variable Würfel ist nur innerhalb der "Do/While" Schleife vorhanden, die Abfrage wird aber außerhalb des Blocks durchgeführt. Du musst die Variable Würfel also vor "do {...}" anlegen.
Achja, "ü" ist vermutlich nicht zulässig.
Prüf mit dem Debugger, ob in Würfel wirklich immer eine 6 steht.
Du hast da nämlich ein Semikolon (";") in Zeile 10, das da nicht hingehört. Dadurch wird vermutlich dein If-Fall abgebrochen und der Else-Zweig ausgeführt.
Versuche wuerfel vor der do-while Schleife zu definieren, andernfalls ist wuerfel nur innerhalb dieser Schleife gültig.
int wuerfel = 0;
do
{
wuerfel = (int) (1 + Math.random() * 6);
...
} while (wuerfel == 6)
und bitte keine Umlaute :-)
Bei Java ist es so, dass die Variablen nur da verfügbar sind, wo sie deklariert wurden. Also wenn du innerhalb der "Do"-Klammer eine Variable deklarierst, ist sie auch nur innerhalb der "Do"-Klammer verfügbar. Da wo das where ist, ist die "Do"-Klammer aber schon zu Ende und dadurch ist auch die Variable nicht mehr da.
Du musst das "int würfel;" also vor das "do" schreiben und im "do" dann nur noch "würfel = (int)(1+Math.random()*6);" ohne int.
AAAAHH, super. Das hat mir rießig geholfen. Vorher habe ich in der do schleife das int nochmal mit genommen und somit den fehler bekommen, dass die variable doppelt deklariert wird.
Ergänzung:
Fehlermeldung ist natürlich in Zeile 16 und nicht 23, wie man sieht.
Ah super, vielen dank. Jetzt habe ich das vor der do schleife eingefügt. Und es mal ausprobiert. Aus irgend einem grund würfel ich nun die ganze zeit 6er, was habe ich denn falsch gemacht?