2014-10-19 75 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