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

Java while循环与if判断问题:逗号后非整数输入无法触发报错

问题根源

你当前的校验逻辑完全错误:你通过判断temp2.length() > 2来触发“逗号后未跟随整数”的报错,该逻辑和“是否为整数”没有任何关联:

  • 合法的三位及以上整数(比如123)会被误判为非法输入
  • 长度小于3的非数字内容(比如a)不会触发你的报错,反而会在执行Integer.parseInt时直接抛出程序异常

修复方案

直接利用Integer.parseInt的转换结果做校验:如果转换抛出NumberFormatException异常,就说明逗号后的内容不是合法整数,触发对应报错即可。同时你需要调整现有判断逻辑的顺序,避免出现错误后依然执行后续逻辑。

修正后核心代码

while (!datapoint.equals("-1")) {
    System.out.println("Enter a data point (-1 to stop input):");
    datapoint = scnr.nextLine();
    
    // 先判断是否终止输入
    if (datapoint.equals("-1")) {
        break;
    }

    // 校验逗号数量
    int commaCount = 0;
    for (int i = 0; i < datapoint.length(); i++) {
        if (datapoint.charAt(i) == ',')
            commaCount++;
    }
    if (commaCount > 1) {
        System.out.println("Error: Too many commas in input.");
        System.out.println();
        continue; // 出错直接进入下一轮输入,不执行后续逻辑
    }
    if (commaCount == 0) {
        System.out.println("Error: No comma in string.");
        System.out.println();
        continue;
    }

    // 分割处理内容,限制只分割成2段,避免逗号后还有异常字符也能正常取到后半段
    String[] values = datapoint.split(",", 2);
    String temp1 = values[0].trim(); // 直接用trim去除前后空格,写法更简洁
    String temp2 = values[1].trim();

    // 校验逗号后是否为整数
    int convert;
    try {
        convert = Integer.parseInt(temp2);
    } catch (NumberFormatException e) {
        System.out.println("Error: Comma not followed by an integer.");
        System.out.println();
        continue;
    }

    // 全部校验通过,执行后续逻辑
    System.out.println("Data string: " + temp1);
    System.out.println("Data integer: " + convert);
    names.add(temp1);
    ints.add(convert);
    System.out.println();
}

修复效果

输入John Doe, nine时,Integer.parseInt("nine")会抛出异常,进入catch分支触发你需要的报错;输入Jane Doe, 9可以正常通过校验执行后续逻辑,同时兼容多位整数的合法输入。

内容的提问来源于stack exchange,提问作者Jake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:00