2014-10-19 84 views
0

我有一個while循環運行,以確保用戶輸入正確的信息。但是,它不會通過循環再次詢問用戶。例如,如果我在查找整數時輸入「k」,它將不會經過任何程序,而不會輸出任何內容並且程序被卡住。我發現a question similar to this problem,但提供的解決方案仍然無法正常工作。雖然在我的程序跳過while循環並繼續之前,現在它在永恆中一無所獲。while循環忽略try-catch

while (errorLoop) { 
    try { 
     if (kb.hasNextInt()) { 
      Player.setBet(kb.nextInt()); 
     } 
    } 
    catch (InputMismatchException e) { 
     System.out.println("Please enter a positive number."); 
    } 
    if (Player.getBet() > 0) { 
     errorLoop = false; 
    } 
} 

回答

1

您的代碼並沒有忽視在try-catch,它根本無法拋出InputMismatchException,因爲你確保下一個輸入可被分析爲INT(通過檢查kb.hasNextInt()爲true)調用kb.nextInt()之前。

您可以刪除在try-catch:

while (errorLoop) { 
    if (kb.hasNextInt()) { 
     Player.setBet(kb.nextInt()); 
     if (Player.getBet() > 0) { 
      errorLoop = false; 
     } else { 
      kb.nextLine(); 
      System.out.println("Please enter a positive number."); 
     } 
    } else { 
     kb.nextLine(); 
     System.out.println("Please enter a positive number."); 
    }    
} 
+0

心不是第二別的情況下,多餘的? +1對於很好的解釋! – user 2014-10-19 18:47:41

+0

@user稍微改變了邏輯。兩個elses都是必需的。第一個處理負整數。第二個處理非int輸入。在這兩種情況下,您都希望消耗當前行的末尾,以便下一次迭代可以嘗試在下一行中找到一個int。 – Eran 2014-10-19 18:52:28

+0

現在我完全同意;) – user 2014-10-19 19:00:37