You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:36:02