2017-06-19 1 views
0

Ich habe ein Problem mit diesem Code. Das Problem, wie ich es sehe ist, dass, wenn der Benutzer den Code ausführt und entweder richtig rät oder die maximale Anzahl von Versuchen verwendet, die While-Schleife nicht eingreift und das Spiel neu starten lässt. Meine Idee ist, den Zähler (Versuch) auf Null zurückzusetzen und neu zu starten, aber ich bekomme nur die Exit-Nachricht mit der Gesamtpunktzahl stattdessen.Wie neu starten while loop Anzahl Guessing Spiel

int guess = 0; 
    int attempt = 0; 
    int number = new Random().nextInt(1000) + 1; 
    int scorePlayer = 0; int scoreComputer = 0; 
    boolean repeat; 

    System.out.println("Hello and welcome to the number guessing game."); 
    System.out.println("Please guess a number between 1 and 1000"); 


    while(repeat == true){ 
     do{ 
      Scanner scan = new Scanner(System.in); 
      guess = Integer.parseInt(scan.nextLine()); 
      System.out.println("The number you guessed is "+guess); 
      attempt++; 

      if(guess == number){ 
       System.out.println("Congratulations! You got it!!"); 
       scorePlayer++; 
       System.out.println("Would you like to play again? [YES/NO]"); 
       Scanner a = new Scanner(System.in); 
       String answer = a.nextLine().toUpperCase(); 
       if (answer != "YES"){ 
        //repeat = false; 
        System.out.println("Thank you for playing"); 
        System.out.println("The final score is "+scorePlayer+" to you and "+scoreComputer+" to the server"); 
        if (scorePlayer<scoreComputer){ 
         System.out.println("Computer wins!"); 
        }else{ 
         System.out.println("You win!"); 
        }break; 
       }else{ 
        attempt = 0; 
       } 
      }else if(guess < number){ 
       System.out.println("That is incorrect, try a larger number"); 

      }else if(guess > number){ 
       System.out.println("That is incorrect, try a smaller number"); 

      }if(attempt == 10 && guess != number){ 
       System.out.println("That is the max number of guesses allowed"); 
       System.out.println("The number you were looking for is "+number); 
       scoreComputer++; 
       System.out.println("Would you like to play again? [YES/NO]"); 
       Scanner b = new Scanner(System.in); 
       String answer = b.nextLine().toUpperCase(); 
       if (answer != "YES"){ 
        //repeat = false; 
        System.out.println("Thank you for playing"); 
        System.out.println("The final score is "+scorePlayer+" to you and "+scoreComputer+" to the server"); 
        if (scorePlayer<scoreComputer){ 
         System.out.println("Computer wins!"); 
        }else{ 
         System.out.println("You win!"); 
        }break; 
       }else{ 
        attempt = 0; 
       } 
      } 

     }while(guess != number || attempt == 0); 
     repeat = false; 
    } 
+0

Gegeben dann fixiert man den Compilerfehler 'while (repeat = true)': Sie setzen 'repeat' auf' false' direkt nach dem ersten inneren 'do-while'-Schleife beendet wurde. Was ist also die Idee der äußeren Schleife? Es läuft genau einmal. – AKSW

Antwort

2

Einfach "=" ist ein Zuweisungsoperator, ändern Sie ihn einfach in das Doppel "==".

while(repeat == true) 
+0

Das behebt es nicht, das Problem wurde nicht durch diesen Tippfehler verursacht, also denke ich, dass das Problem woanders liegen könnte. Der Code erlaubt nicht, dass das Spiel neu gestartet wird, nachdem die richtige Nummer erraten wurde oder der Benutzer keine Versuche mehr hat – user3018640

1

Zusätzlich zu, was gesagt ugur Sie einfach

tun können
while(repeat) 

weil Wiederholung ist eine Boolesche Variable (wahr oder falsch zurückkehrt)

0

Überprüfen Sie die letzte Zeile in der äußeren Schleife Sie setzen repeat=false. Also, wenn Sie break von der inneren Schleife, äußere while überprüfen Sie für wiederholen und es ist jedes Mal falsch, außer dem ersten.