2012-10-03 30 views
-5

這可能是一個明顯的答案,但它明天到期了,我完全被難住了。除了最後的if語句之外,一切都很好。看起來continueGame循環無限循環了if語句。如果有人可以幫我解決這個問題,請。Java不會停止循環我的if語句

import java.util.Random; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 


public class HighLOw { 
    public static void main(String[] args) throws IOException { 

     String input = null; 
     int number = 0; 
     int tries = 0; 
     boolean highorlow = false; 
     boolean continueGame = false; 
     boolean validInput = false; 
     Random random = new Random(); 
     int randomNumber = (random.nextInt(101)); 

     System.out.println("Welcome to the High/Low game."); 
     System.out.println("Guess a number between 0 and 100."); 
     System.out.println(
       "In order to print a random number, type your number in the console and press enter."); 
     System.out.println("Keep going until you get the right number."); 
     System.out.println("Have fun."); 
     System.out.println(randomNumber); 

     while (continueGame == false) { 

      while (validInput == false) { 
       try { 
        BufferedReader bufferedReader = new BufferedReader(
          new InputStreamReader(System.in)); // BufferedReader variable where the user will input their answer 

        input = bufferedReader.readLine(); 
        number = Integer.parseInt(input); 
        validInput = true; 

       } catch (NumberFormatException ex) { 
        System.out.println("Invalid input, please enter a number."); 
        validInput = false; 
       } 

       if (number < 0 || number > 100) { 
        System.out.println(
          "Error, you must enter a number that is between 0 and 100"); 
        validInput = false; 
       } 
      } 

      if (number < randomNumber) { 
       System.out.println(
         number + " is too low. Please try a higher number"); 
       tries++; 
       highorlow = false; 
      } else if (number > randomNumber) { 
       System.out.println(
         number + " is too high. Please try a lower number"); 
       tries++; 
       highorlow = false; 
      } else if (number == randomNumber) { 
       System.out.println(
         "Congratulations, you guessed the right number. Now go outside."); 
       tries++; 
       System.out.println("It took you " + tries + (" tries.")); 
       System.out.println("Game Ended"); 
       continueGame = true; 
      } 
     } 
    } 
} 

回答

4

一些提示:當您進入首次有效數字,validInput將成爲true。然後,代碼繼續比較numberrandomNumber,然後再次跳轉到continueGame循環的開始。 validInput現在的價值是多少,這對validInput循環會有什麼影響? number會獲得新的價值嗎?

而且你不需要做while (validInput == false) ..只要while (!validInput)相當於..

+0

非常感謝你的幫助。它現在工作100%。這是一個noob錯誤,但我剛開始使用java。 – user1718272

0

記住if/else語句是從頂部評估,以底部。一旦匹配if被發現,其身體被執行並退出。

記住這一點,這意味着if/else結構的給定評估僅有一個case,其中主體將被執行。

看看你if條款,想想他們像許多行(或更好,但繪製什麼numberrandomNumber可能是一些例子號線),看看答案在你跳出。