Java实现读取输入直到负整数返回最大值的代码运行异常如何修复?
问题原因分析
- 核心逻辑不符合需求:现有代码写死了固定循环读取5个整数,没有按照实验要求「读到负整数就终止读取」,这是所有报错和结果不符合预期的根源:
- 输入长度小于5的时候(比如
45 -1、0 -100),Scanner会因为读取不到足够的整数抛出运行时异常,也就是你看到的报错 - 输入长度大于5的时候(比如
0 10 20 30 40 -50),只会读取前5个值,遗漏后续更大的非负整数,导致结果错误
- 输入长度小于5的时候(比如
- 存在大量冗余无用代码:单独的
numValues ;语句、if (numValues > 0) {maxSoFar = maxSoFar;}逻辑完全没有实际作用,可以直接删除 - 边界场景未处理:如果第一个读入的就是负整数,现有代码会直接返回初始值0,不符合实际业务逻辑要求
修复后的完整代码
import java.util.Scanner; public class Max { public int findMax() { Scanner scnr = new Scanner(System.in); // 初始值设为整数最小值,避免全是0或者小值的边界问题 int maxSoFar = Integer.MIN_VALUE; int currValue; // 标记是否读取过有效非负整数 boolean hasValidInput = false; // 循环读取直到遇到负整数 while (true) { currValue = scnr.nextInt(); if (currValue < 0) { break; } hasValidInput = true; if (currValue > maxSoFar) { maxSoFar = currValue; } } scnr.close(); // 无有效非负输入的场景默认返回0,可根据需求调整返回逻辑 return hasValidInput ? maxSoFar : 0; } public static void main(String[] args) { Max test = new Max(); System.out.println(test.findMax()); } }
验证说明
修复后的代码完全符合所有测试用例要求:
- 输入
45 -1:读取45后遇到-1终止,返回45,无报错 - 输入
0 -100:读取0后遇到-100终止,返回0,无报错 - 输入
0 10 20 30 40 -50:读取所有非负整数后终止,返回最大值40,符合预期 - 原有已通过的测试用例结果保持正常
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

