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
相关产品推荐
相关产品推荐

