2017-06-20 350 views
1

所以我幾乎都是編程的新手,並且忙於玩「while while循環」,我的代碼可能很糟糕,並且最有可能有1000個更好的方法來做我想做的事情但無論如何。while while循環Java

我想要使用主要方法,然後兩個其他方法(用於實踐目的)要求用戶選擇1到10之間的數字,然後如果他們想再試一次。

我得到代碼運行,直到它要求用戶輸入yes/no,但代碼停止運行,我不知道爲什麼?

public static void main(String[] args) { 
    chooseNum(); 

} 

public static boolean chooseNum() { 
    int number = 4; 
    do { 
     System.out.println("Enter a number 1 to 10"); 
     int userNum = in.nextInt(); 
     if (number == userNum) { 
      System.out.println("You chose the correct number!"); 
      return tryAgain(); 
     } else if (number != userNum) { 
      System.out.println("You chose the incorrect number!"); 
      return tryAgain(); 
     } else 
      System.out.println("invalid Response"); 
    } 
    while (false); 
    return false; 
} 

public static boolean tryAgain(){ 

     System.out.println("Try again? yes/no"); 
     String response = in.nextLine(); 
     if (response.equalsIgnoreCase("yes")){ 
      return chooseNum(); 
     }else if (response.equalsIgnoreCase("no")){ 
      return false; 
    }else 
     return false; 
    } 
} 

和我的輸出如下:

Enter a number 1 to 10 
1 
You chose the incorrect number! 
Try again? yes/no 

Process finished with exit code 0 

我似乎無法得到它,爲了進一步讓我輸入yes或no。

我知道這是基本的,我很可能看起來很可憐​​,但任何幫助將不勝感激。

也許另一個新秀能得到幫助的人了:)

非常感謝他們的機會!

+0

預期產量是多少? –

+0

那麼它應該給我選擇輸入「是」或「否」。如果是的話,它再次運行循環,我選擇了另一個數字,如果沒有,那麼它結束了代碼。 –

+1

嘗試'做{...} while(true)'而不是'... while(false)'。 –

回答

0

使用next()而不是nextLine(),因爲當你讀取int並且加入\n來提交值時。掃描儀將此視爲輸入。 next()應該忽略之前輸入的\n,並將按照您的預期採取輸入。

+0

謝謝!有用:) –

-1

啊, 「nextLine」 疑難雜症...

當你進入1,STDIN包含1\n\r。當你調用nextInt()時,它會彈出1在STDIN流中離開\n\r。現在,當它調用nextLine()以獲取下一個輸入時,它將讀取下一個\n\r,並返回一個空字符串,因爲\n\r仍污染IN流。如果使用next(),它將忽略\n\r(以及其他任何空格),並給出STDIN中的下一個單詞。 (您也可以直接調用nextLine()兩次以清除來自nextInt調用的\n\r

而這是使用do-while的正確方法。

public static void main(String[] args) { 
    chooseNum(); 
} 

public static void chooseNum() { 
    int number = 4; 
    do { 
     System.out.println("Enter a number 1 to 10"); 
     int userNum = in.nextInt(); 
     if (number == userNum) { 
      System.out.println("You chose the correct number!"); 
     } else if (number != userNum) { 
      System.out.println("You chose the incorrect number!"); 
     } else 
      System.out.println("invalid Response"); 
    } 
    while (tryAgain()); 
} 

public static boolean tryAgain(){ 
    do { 
     System.out.println("Try again? yes/no"); 
     String response = in.nextLine(); 
     if (response.equalsIgnoreCase("yes")){ 
      return true; 
     }else if (response.equalsIgnoreCase("no")){ 
      return false; 
     }else 
      System.out.println("Invalid response."); 
     } 
    } while(true); 
} 
0

您可以通過在方法中創建一個新的掃描器實例來避免nextLine錯誤。我通過在chooseNum和tryAgain中聲明一個新的掃描器來對代碼進行編輯,這將避免由緩衝輸入引起的問題。我希望這有幫助。

import java.util.Scanner; 

public class dowhile { 
    public static void main(String[] args) { 
     chooseNum(); 
    } 

    public static boolean chooseNum() { 
     Scanner in = new Scanner(System.in); 
     int number = 4; 
     do { 
      System.out.println("Enter a number 1 to 10"); 
      int userNum = in.nextInt(); 
      if (number == userNum) { 
       System.out.println("You chose the correct number!"); 
       return tryAgain(); 
      } else if (number != userNum) { 
       System.out.println("You chose the incorrect number!"); 
       return tryAgain(); 
      } else 
       System.out.println("invalid Response"); 
     } 
     while (false); 
     return false; 
    } 

    public static boolean tryAgain(){ 
     Scanner in = new Scanner(System.in); 
     System.out.println("Try again? yes/no"); 
     String response = in.nextLine(); 
     if (response.equalsIgnoreCase("yes")){ 
      return chooseNum(); 
     }else if (response.equalsIgnoreCase("no")){ 
      return false; 
     }else 
      return false; 
    } 
} 
0

當您執行行return tryAgain();時,chooseNum()方法結束。這是返回聲明的結果。