所以,我被这段代码困住了:
import java.util.InputMismatchException;
import java.util.Scanner;
public class ConsoleReader {
Scanner reader;
public ConsoleReader() {
reader = new Scanner(System.in);
//reader.useDelimiter(System.getProperty("line.separator"));
}
public int readInt(String msg) {
int num = 0;
boolean loop = true;
while (loop) {
try {
System.out.println(msg);
num = reader.nextInt();
loop = false;
} catch (InputMismatchException e) {
System.out.println("Invalid value!");
}
}
return num;
}
}
这是我的输出:
插入一个整数:< br >无效值!< br >插入一个整数:< br >无效值!< br >...
while-do的保护是“循环”变量。
在代码到达赋值循环之前引发的异常本身= false准确地说,异常是在前面的语句中抛出的,该语句是num = reader . nextint();
要终止这个while-do,您需要用另一个逻辑事物来保护您的while-do,例如:
String line = reader.nextLine();
Scanner sc = new Scanner(line);
public int readInt(String msg) {
int num = 0;
boolean loop = true;
while (loop) {
try {
System.out.println(msg);
String line = reader.nextLine();
Scanner sc = new Scanner(line);
num = sc.nextInt();
loop = false;
} catch (InputMismatchException e) {
System.out.println("Invalid value!");
}
}
return num;
}
这样,您就有了一个获取输入的扫描器和一个验证输入的扫描器,这样您就不必担心读者是否关心他们是否输入了正确的输入形式。
根据扫描仪的javadoc:
当扫描程序引发 InputMismatchException 时,扫描程序将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该标记。
这意味着,如果下一个标记不是< code>int,它将抛出< code > InputMismatchException ,但该标记将保留在那里。因此,在循环的下一次迭代中,< code>reader.nextInt()再次读取相同的标记,并再次引发异常。你需要的是把它用光。在< code>catch中添加一个< code>reader.next()来使用令牌,该令牌无效,需要丢弃。
...
} catch (InputMismatchException e) {
System.out.println("Invalid value!");
reader.next(); // this consumes the invalid token
}
我是一个初学者,我写了一个java程序,允许你输入n个数字,它只显示最大值、最小值和平均值,如果输入了数字-5,我的程序显示不正确,我需要一些帮助。我想在输入字符串而不是整数时使用try/catch来捕获错误。
我想让用户输入一个String和四个整数值,如果用户输入的类型不匹配,我想让程序继续要求用户输入整数值,为什么代码会一直循环,如果用户插入了错误的类型,永远不会等待用户输入?
正如使用boto3完全扫描dynamoDb中所解释的,我构建了一个解决方案,使用某些条件完全扫描dynamoDb表。这是我的代码: 但是当代码被执行时,它会进入一个无限循环。这是LastEvaluatedKey每次迭代的输出: 它一直在这两对之间循环。 编辑: 我添加了do_scan方法。
如果输入了正确的文件名,就没有问题。如果输入了不正确的文件名,无限循环会不断告诉用户输入一个文件名。但它不会等待用户输入文件名。它在无限循环中不断处理第一个错误数据。我在catch块中使用nextLine,它应该清除错误的输入。还尝试了reset()。我做错了什么?
问题内容: boolean z = false; do { try { a = sc.nextInt(); z = true; } catch(Exception e) { } } while(!z); 试试这个。如果您第一次尝试整数,则整数将正确执行。但是,如果您输入错误的文本类型,即使您接下来输入int并跳过将布尔值分配为true的情况,也会变成无限循环。为什么是这样? 问题答案: 您的问题出