Java使用Scanner#nextInt接收非整数时抛出异常无法进入else分支
问题根因
- 你的程序在执行到
keyboard.nextInt()时就已经抛出异常:Scanner类的nextInt()方法要求输入必须匹配整数格式,一旦遇到带逗号/小数点的非整数输入,会直接抛出InputMismatchException终止程序,根本不会运行到后续的if-else分支。 - 你写的
if (zahl1 % 1 == 0 && ...)校验逻辑完全无效:zahl1等变量本身就是int类型,只要能成功赋值必然是整数,这个判断永远为真,就算程序能走到if分支,else块也永远不会触发。
修复方案
不需要做多余的模运算校验,只要在读取输入前先判断输入格式是否为整数即可,推荐用Scanner自带的hasNextInt()方法做预校验,修正后的代码如下:
import java.util.Scanner; public class Minimum { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); int[] zahlen = new int[3]; System.out.print("Bitte geben Sie drei Zahlen ! "); // 依次校验3个输入是否为整数 for (int i = 0; i < 3; i++) { if (keyboard.hasNextInt()) { zahlen[i] = keyboard.nextInt(); } else { System.out.println("Die angegebene Zahl ist ungültig !!"); // 清空错误输入,避免Scanner卡死 keyboard.next(); // 输入不合法直接结束程序 return; } } // 所有输入都是整数,直接计算最小值 int min = getMin(zahlen); System.out.println("Minimum ist : "+ min); } private static int getMin(int[] zahlen) { int minimum = zahlen[0]; for (int i = 0; i < zahlen.length; i++) { int zahl = zahlen[i]; if (zahl < minimum) { minimum = zahlen[i]; } } return minimum; } }
内容的提问来源于stack exchange,提问作者kololo
相关产品推荐
相关产品推荐

