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

Java实现保留最高分功能:代码问题排查与修正技术问询

Java 保留最高分功能:代码修正与问题解析

嗨,我来帮你搞定这个Java程序的问题!你想要实现的是输入分数并保留最高分的功能对吧?先看看你原来代码里的几个核心问题,再给你修正后的可运行版本~

原代码存在的问题

假设你的原代码是这样的(符合你提到的错误点):

import java.util.Scanner;

public class HighScore {
    public static void main(String[] args) {
        int highScore = 0;
        while (true) {
            Scanner input = new Scanner(System.in); // 每次循环重复创建Scanner
            System.out.print("请输入分数(输入-1退出):");
            int score = input.nextInt();
            if (score > highScore) { // 条件判断顺序错误,未优先处理退出逻辑
                highScore = score;
                System.out.println("新的最高分:" + highScore);
            } else if (score == -1) {
                System.out.println("最终最高分:" + highScore);
                break;
            } else {
                System.out.println("当前最高分仍是:" + highScore);
            }
            input.close(); // 循环内关闭Scanner,导致后续输入报错
        }
    }
}

这里的三个关键错误:

  • 重复创建并提前关闭Scanner:每次循环都新建Scanner,还在循环内关闭,第二次循环时Scanner已经被关闭,会直接抛出NoSuchElementException
  • 条件判断顺序颠倒:先判断分数是否大于最高分,再判断退出指令-1,导致输入-1时会先和最高分比较(比如初始最高分是0,-1不大于0,会走else分支,根本不会触发退出)
  • 退出逻辑失效:因为判断顺序问题,退出指令无法被正确识别,程序无法正常终止

修正后的完整代码

import java.util.Scanner;

public class HighScore {
    public static void main(String[] args) {
        int highScore = 0;
        // 只初始化一次Scanner,放在循环外部
        Scanner input = new Scanner(System.in);
        
        while (true) {
            System.out.print("请输入分数(输入-1退出):");
            
            // 新增:校验输入是否为有效整数,避免非数字输入导致崩溃
            if (input.hasNextInt()) {
                int score = input.nextInt();
                
                // 优先处理退出逻辑,确保输入-1时直接终止程序
                if (score == -1) {
                    System.out.println("最终最高分:" + highScore);
                    break;
                }
                
                // 再判断是否需要更新最高分
                if (score > highScore) {
                    highScore = score;
                    System.out.println("新的最高分:" + highScore);
                } else {
                    System.out.println("当前最高分仍是:" + highScore);
                }
            } else {
                System.out.println("请输入有效的整数分数!");
                input.next(); // 清除无效输入,防止程序陷入死循环
            }
        }
        // 循环结束后统一关闭Scanner
        input.close();
    }
}

修正点说明

  • Scanner生命周期优化:只在程序开始时创建一次Scanner,循环结束后再关闭,避免重复实例化和提前关闭导致的输入异常
  • 逻辑优先级调整:把退出条件放在最前面判断,确保用户输入-1时直接触发退出,不会被其他逻辑干扰
  • 输入合法性校验:添加hasNextInt()判断,处理用户输入非整数的情况,同时用input.next()清除无效输入,防止程序卡住
  • 代码可读性提升:拆分逻辑分支,让每个条件块的职责更清晰,后续维护也更方便

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:34:52