如何使用扫描仪仅接受有效的 int 作为输入

2022-09-01 15:38:51

我试图使一个小程序更加健壮,我需要一些帮助。

Scanner kb = new Scanner(System.in);
int num1;
int num2 = 0;

System.out.print("Enter number 1: ");
num1 = kb.nextInt();

while(num2 < num1) {
    System.out.print("Enter number 2: ");
    num2 = kb.nextInt();
}
  1. 数字 2 必须大于数字 1

  2. 另外,我希望程序自动检查并忽略用户是否输入字符而不是数字。因为现在,当用户输入例如而不是数字时,程序就会退出。r


答案 1

Use Scanner.hasNextInt()

如果可以使用该方法将此扫描程序输入中的下一个标记解释为默认基数中的值,则返回此值。扫描仪不会前进超过任何输入。trueintnextInt()

下面是一个用于说明的代码段:

Scanner sc = new Scanner(System.in);
System.out.print("Enter number 1: ");
while (!sc.hasNextInt()) sc.next();
int num1 = sc.nextInt();
int num2;
System.out.print("Enter number 2: ");
do {
    while (!sc.hasNextInt()) sc.next();
    num2 = sc.nextInt();
} while (num2 < num1);
System.out.println(num1 + " " + num2);

您不必也不必担心 .请注意,由于这些方法不会前进到任何输入,因此如果要跳过“垃圾”,则可能需要调用,如上所示。parseIntNumberFormatExceptionhasNextXXXnext()

相关问题


答案 2
  1. 条件 num2 < num1 应该是 num2 <= num1,如果 num2 必须大于 num1
  2. 不知道kb对象是什么,我会先读一个,然后读一个,如果你没有例外,那么它是一个数字,如果你这样做,读一个新的,也许通过将num2设置为Integer.MIN_VALUE并在你的示例中使用相同类型的逻辑。StringtryInteger.parseInt()catch

推荐