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 } }