Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用try-catch和while循环捕获时出错_Java_Loops_While Loop - Fatal编程技术网

Java 使用try-catch和while循环捕获时出错

Java 使用try-catch和while循环捕获时出错,java,loops,while-loop,Java,Loops,While Loop,我试图确保用户输入是一个整数,但是当我使用下面的代码时,我只得到一个无限循环的print语句。有什么改进的建议吗 boolean valid = false; System.out.println("What block are you gathering? (use minecraft block ids)"); while(valid == false){ try{ block = input.nextInt(); valid = true;

我试图确保用户输入是一个整数,但是当我使用下面的代码时,我只得到一个无限循环的
print
语句。有什么改进的建议吗

boolean valid = false;
System.out.println("What block are you gathering? (use minecraft block ids)");
while(valid == false){
    try{
        block = input.nextInt();
        valid = true;
    }
    catch(InputMismatchException exception){
        System.out.println("What block are you gathering? (use minecraft block ids)");
        valid = false;
    }
}
nextInt()。要解决此问题,您需要通过调用接受任何值的
next()
nextLine()
来显式使用它

顺便说一句,为了使代码更干净,避免像创建异常这样的昂贵操作,您应该使用像
hasnetint()
这样的方法

下面是如何组织代码

System.out.println("What block are you gathering? (use minecraft block ids)");
while(!input.hasNextInt()){
    input.nextLine();// consume invalid values until end of line, 
                     // use next() if you want to consume them one by one.
    System.out.println("That is not integer. Please try again");
}
//here we are sure that next element will be int, so lets read it
block = input.nextInt();

块是什么类型的?@UmaKanth在这里不重要:)。你能再详细说明一下吗?我使用了NumberFormatException,但得到了这个错误:java.util.Scanner.throwFor(未知源)java.util.Scanner.next(未知源)java.util.Scanner.nextInt(未知源)java.util.Scanner.nextInt(未知源)java.nextInt(未知源)java.util.Scanner.nextInt(未知源)firsttry.main.main(main.java:28)另外,编写
while(!valid)
总是比编写
while(valid==false)
@tomnicefind更好的做法!这正是问题所在。