2013-11-04 45 views
1

可能會丟失一些非常愚蠢的東西,但我的while循環不會停止打印錯誤消息。雖然循環不會停止循環,但有異常

有人可以快速瀏覽並指向正確的方向嗎?

package week5; 

import java.util.*; 
public class Week5 {  
    public static void main(String[] args) {  
     Scanner myKeyboard = new Scanner(System.in);   
     inputInt();   
    } 

    public static int inputInt(){   
     Scanner myKeyboard = new Scanner(System.in);   
     System.out.println("Enter number:");   
     int num;         
     boolean carryOn = true;      
     while (carryOn = true) {     
       {          
        try {      
         num = myKeyboard.nextInt();      
         carryOn = false;                 
         }     
        catch (Exception e) { 
        System.out.println ("Integers only");           
        }      
        }              
      } 
     return 0; 
     } 
+0

可能是軟件開發中最常見的錯誤。感謝您回憶過去的日子;) –

+0

嘗試在您的緩存中添加返回-1 –

+0

myKeyboard.next();在趕上解決它,歡呼夥計 – AnjunaTom

回答

5

此行是問題

while (carryOn = true) { 

除了使用比較操作==,你正在使用的賦值運算符=。所以基本上,你設置carryOntrue每次迭代,然後自動運行的循環體,因爲條件變得基本

while (true) { 

這個問題行只是改變

while (carryOn == true) { 
+0

感謝您的答案,雖然我已經嘗試了兩種解決方案,但只要輸入除整數以外的任何其他東西,整數只有錯誤打印,直到我結束程序 – AnjunaTom

0

在您的情況:

 while(carryOn==true) 

 while(carryOn) 

將解決您的問題

1

除了無限循環,事實上你總是return 0;不管什麼類型的用戶,代碼是遠遠大於它需要更復雜。

// only create one scanner 
private static final Scanner myKeyboard = new Scanner(System.in); 

public static void main(String[] args) { 
    int num = inputInt(); 
    // do something with num 
} 

public static int inputInt() { 
    System.out.println("Enter number:"); 

    while (true) { 
     if (myKeyboard.hasNextInt()) { 
      int num = myKeyboard.nextInt(); 
      myKeyboard.nextLine(); // discard the rest of the line. 
      return num; 
     } 
     System.out.println ("Integers only, please try again"); 
    } 
}