2016-10-04 122 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.