Scanner scanner = new Scanner();
int number = 1;
do
{
try
{
option = scanner.nextInt();
}
catch (InputMismatchException exception)
{
System.out.println("Integers only, please.");
}
}
while (number != 0);
尽管有异常处理,但在给出非整数输入时,此代码将进入无限循环。它不是Scanner
暂停以在下一次迭代中收集输入,而是继续抛出InputMismatchException
直到程序被杀死。
扫描整数(或其他类型,我猜)输入,丢弃无效输入并正常继续循环的最佳方法是什么?
答案 0 :(得分:5)
将您的代码更改为此
catch (InputMismatchException exception)
{
System.out.println("Integers only, please.");
scanner.nextLine();
}
答案 1 :(得分:5)
在尝试将输入值分配给int之前,应检查输入是否可以解析为int。您不应该使用异常来确定输入是否正确,这是不好的做法,应该避免。
if(scanner.hasNextInt()){
option = scanner.nextInt();
}else{
System.out.printLn("your message");
}
这样,您可以检查输入是否可以解释为int,如果是,则指定值,如果不显示消息。调用该方法不会使扫描仪前进。
答案 2 :(得分:3)
来自javadoc:如果下一个标记无法转换为有效的int值,则此方法将抛出InputMismatchException,如下所述。如果翻译成功,扫描仪将超过匹配的输入。
请注意那里的第二句话,只有在成功的情况下才会进展。这意味着您需要将catch块更改为以下内容:
catch (InputMismatchException exception)
{
System.out.println("Integers only, please.");
scanner.next();
}
答案 3 :(得分:0)
我认为这样更好
import java.util.*;
class IntChkTwo{
public static void main(String args[]){
Scanner ltdNumsScan = new Scanner(System.in);
int ltdNums = 0;
int totalTheNums = 0;
int n = 4;
System.out.print("Enter Five Numbers: ");
for(int x=0;x<=n;x++){
try{
ltdNums = ltdNumsScan.nextInt();
totalTheNums = totalTheNums + ltdNums;
}catch(InputMismatchException exception){
n+=1;//increases the n value
//maintains the same count of the numbers
//without this every error is included in the count
System.out.println("Please enter a number");
ltdNumsScan.nextLine();
}//catch ends
}//for ends
int finalTotalNums = totalTheNums;
System.out.println("The total of all of the five numbers is: "+finalTotalNums);
}
}
我对代码示例感到困惑,所以我不得不重写它。希望这可以帮助你甚至多年。我知道它有所不同,但是当我尝试使用示例代码添加数字时,我一直很困惑。
起初我的烦恼是错误。
我宁愿放弃do-while循环,之前尝试过,如果你错过了某些东西,那就会进入无限循环。
答案 4 :(得分:0)
如果它扫描非int变量,则会弹出异常,如果不是flag则为true,循环将退出。
Scanner scanner = new Scanner();
int number = 1;
boolean flag = false;
do
{
try
{
option = scanner.nextInt();
flag=true;
}
catch (InputMismatchException exception)
{
System.out.println("Integers only, please.");
}
}
while ( flag );