2016-10-04 120 views
0

爲什麼第二個while循環while (numberOfTries < 2)同時取消兩個循環?如果沒有不正確的答案,它會運行得很好。但是,假設我選擇了4個問題,而且我只處理第一個問題。我給了不正確的答案2次,所以程序應該說兩次錯誤,然後給我一個新的問題,因爲while (numberOfTries < 2)應該強制它從該循環中斷開。但事實並非如此,它只是放棄了整個事情。我知道它必須是一個邏輯問題,所以我錯過了什麼?爲什麼第二個while循環會取消兩個while循環?

import java.util.Random; 
import java.util.Scanner; 

public class Howthe { 

    public static void main(String[] args) { 
     // Open Scanner 
     Scanner scan = new Scanner(System.in); 

     // Ask user to choose number of problems to be made. 
     // Can only choose 4, 9, or 16 
     System.out.print("Choose a number of problems to be made (4, 9, 16): "); 
     int userChoiceOfProblems = scan.nextInt(); 

     // Ask user to choose a number between 0 and 12 
     System.out.print("\nChoose a number between 0 and 12: "); 
     int userNumberBetween0and12 = scan.nextInt(); 

     // Ask user to choose between add/sub or multiply/divide 
     System.out.println("\nChoose to:" 
       + "\n0: add/sub your chosen number" 
       + " and the randomly generated number: " 
       + "\n1: multiply/divide your chosen number" 
       + " and the randomly generated number: "); 
     int userArithmeticChoice = scan.nextInt(); 

     int counter = 0; 
     String equationString; 
     int equationAnswer; 
     int numberOfAnswersRight = 0; 
     int numberOfTries = 0; 
     int userAnswerToQuestion; 
     if (userArithmeticChoice == 0){ 
      while (counter < userChoiceOfProblems){ 
       // Create random number to decide if add or sub used. 
       // add is equal to 0 and sub is equal to 1 
       Random rand = new Random(); 
       int randomNumberBetween0and1 = rand.nextInt(1) + 0; 

       // Create random number that is multiplied by userNumberBetween0and12 
       int randomNumberBetween0and12 = rand.nextInt(12) + 0; 

       // Add and increase counter by 1 
       if (randomNumberBetween0and1 == 0){ 
        // If numberOfTries is more than 2, then display answer. 
        while (numberOfTries < 2){ 
         // Compute the right answer (addition). 
         equationAnswer = userNumberBetween0and12 + randomNumberBetween0and12; 
         // Produce string of equation, then display string (addition). 
         equationString = userNumberBetween0and12 + " + " 
           + randomNumberBetween0and12; 
         System.out.println(equationString); 
         userAnswerToQuestion = scan.nextInt(); 

         // If answer is right, increase numberOfAnswersRight. 
         if (userAnswerToQuestion == equationAnswer){ 
          numberOfAnswersRight++; 
          System.out.println("Correct!"); 
          break; 
         } 
         // If answer is wrong, continue loop and increase numberOfTries 
         else if (userAnswerToQuestion != equationAnswer){ 
          numberOfTries++; 
          System.out.println("Incorrect");  
         } 
        } // end of while (numberOfTries < 2 && !quit) 
        counter++; 
       } 
      } System.out.println("Yout got " + numberOfAnswersRight + " problem(s) right!"); 
     } 
    } 
} 
+2

如果你在調試器中單步執行代碼,你會看到什麼? –

+0

說實話,我從來沒有用過調試器。 – Trey

+2

除非你打算再也不會有bug,否則你應該學會使用它。這是一個重要的工具,它可以幫助您在幾秒鐘而不是幾個小時內解決問題。 –

回答

2

numberOfTries在您的循環之外初始化。一旦你嘗試兩次,它永遠不會被設置回0,這會導致循環跳過並在下一個問題上完成,因爲numberOfTries已經是2.