cannot be resolved to a variable?

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.


P0LYN0RM 
Fragesteller
 01.04.2019, 11:24

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?

0
Gehilfling  01.04.2019, 11:29
@P0LYN0RM

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.

0

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 :-)

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler mit 10 Jahren Berufserfahrung 💾

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.


P0LYN0RM 
Fragesteller
 01.04.2019, 11:27

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.

0

Ergänzung:

Fehlermeldung ist natürlich in Zeile 16 und nicht 23, wie man sieht.