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

Java实现读取输入直到负整数返回最大值的代码运行异常如何修复?

问题原因分析
  • 核心逻辑不符合需求:现有代码写死了固定循环读取5个整数,没有按照实验要求「读到负整数就终止读取」,这是所有报错和结果不符合预期的根源:
    • 输入长度小于5的时候(比如45 -1、0 -100),Scanner会因为读取不到足够的整数抛出运行时异常,也就是你看到的报错
    • 输入长度大于5的时候(比如0 10 20 30 40 -50),只会读取前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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:36:04