exception后继续循环

我有这段代码。 我想回到循环的开头并再次询问用户输入。 但是,它始终循环而不停止要求输入。 我的代码出了什么问题? 谢谢

while(true){ ... try { int choice = input.nextInt(); <<---=- this should stop and ask for input, but it always loops without stopping. } catch (InputMismatchException e){ <> } } 

来自http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt%28int%29 :

“如果翻译成功,扫描仪将超过匹配的输入。”

啊,但如果翻译不成功怎么办? 在这种情况下,扫描仪不会超过任何输入。 糟糕的输入数据仍然是下一个要扫描的东西,因此循环的下一次迭代将像前一次一样失败 – 循环将继续尝试反复读取相同的错误输入。

为了防止无限循环,您必须超越坏数据,以便您可以获得扫描仪可以读取为整数的内容。 下面的代码片段通过调用input.next()来完成此操作:

  Scanner input = new Scanner(System.in); while(true){ try { int choice = input.nextInt(); System.out.println("Input was " + choice); } catch (InputMismatchException e){ String bad_input = input.next(); System.out.println("Bad input: " + bad_input); continue; } } 

你还没有发布要求输入的内容,

 Scanner input = new Scanner(System.in); int choice; while (true) { System.out.println("Please enter an int: "); if (input.hasNextInt()) { // <-- Check if there is an int. choice = input.nextInt(); break; } else { if (!input.hasNext()) { // <-- Check if there is input. System.err.println("No more input"); System.exit(1); } // What ever is in the buffer isn't an int, print the error. System.out.printf("%s is not an int%n", input.next()); } } // Display the choice. System.out.printf("choice = %d%n", choice); 

这很好用:

 import java.util.InputMismatchException; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner input = new Scanner(System.in); int choice; while(true){ try { choice = input.nextInt(); System.out.println("Your choice: " + choice); } catch (InputMismatchException e){ e.printStackTrace(); } } } } 

尝试做while循环。

  do { try { //get user input done = true; } catch (InputMismatchException e) { System.out.println("The number entered needs to be a int"); } } while (!done); 

这应该抛出并捕获exception, continue命令应该将您发送回while loop 。 你需要一个继续或一个flag来告诉你什么时候它是true

 while(true) { try { int choice = input.nextInt(); throw new InputMismatchException(); } catch (InputMismatchException e) { continue; } } 

catch块中放置一个行分隔符。

 Scanner input = new Scanner(System.in); while(true) { try { int choice = input.nextInt(); } catch (InputMismatchException e) { input.next(); // Line separator } }