我试图捕获一个异常并使它重复,但是它只会创建一个无限循环,然后使程序崩溃……为什么这样做呢?我的渔获物有问题吗?
我环顾了网络和stackoverflow,只能找到与我要达到的目标无关的答案。
boolean bError = true; System.out.println("How many players"); do { try { PLAYERS = input.nextInt(); if(PLAYERS > 5) { System.out.println("maximum of 5"); }//if else { bError = false; } } catch(InputMismatchException e) { System.out.println(e); bError = true; } }while(bError && PLAYERS > 5);
如果您输入无效的数字,则会陷入无休止的循环,因为无效的令牌仍留在流中,并且nextInt()不断尝试以获取它。
nextInt()
您将不得不获得数据流。
您可以做的一件事是nextLine()改为使用,然后显式尝试将返回的内容解析String为整数(例如使用Integer.parseInt())。
nextLine()
String
Integer.parseInt()
您可以做的另一件事是在异常处理程序中调用input.next()(或input.nextLine())以读取(并丢弃)垃圾输入。如果默认设置不能满足您的要求,则可能需要调整Scanner定界符才能next()为您工作。
input.next()
input.nextLine()
Scanner
next()