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

Java Elimination游戏最低分统计功能逻辑错误修复求助

问题原因
  • 最低分变量作用域错误:你把lowestScore声明在了每轮游戏的循环内部,每次新开游戏都会被重新初始化为Integer.MAX_VALUE,因此当前游戏得分永远小于这个初始值,每次都会触发新最低分的判定。
  • 原代码逻辑不完善:原代码仅在用户选择彻底结束游戏时才打印得分,选择重开游戏时不会输出本轮得分,也没有对应的分数统计逻辑。
修改后完整可运行代码
import java.util.Scanner;

public class Elimination {

    public static void main(String[] args) {
        try (Scanner in = new Scanner(System.in)) {
            // 历史最低分声明在最外层,不会随每轮游戏重置
            int lowestScore = Integer.MAX_VALUE;
            boolean playAgain = true;
            // 修正原代码赋值笔误,直接用布尔值判断即可
            while (playAgain) {
                Board B = new Board();
                int die1, die2;
                boolean legalMove;
                String choice = " ";
                while (!choice.equalsIgnoreCase("Q")) {
                    System.out.println("\n" + B);
                    die1 = (int) (1 + Math.random() * 6);
                    die2 = (int) (1 + Math.random() * 6);
                    legalMove = false;
                    System.out.println("Dice roll: " + die1 + " " + die2);
                    while (!legalMove) {
                        System.out.print("What is your move (V=values, S=sum, Q=quit)? ");
                        choice = in.next();
                        if (choice.equalsIgnoreCase("Q")) {
                            legalMove = true;
                            // 退出当前游戏时先统计分数
                            int currentScore = B.score();
                            System.out.println("----------------- Game Ended -----------------");
                            if (currentScore < lowestScore) {
                                lowestScore = currentScore;
                                System.out.println("Score = " + currentScore + " NEW LOWEST SCORE!");
                            } else {
                                System.out.println("Score = " + currentScore);
                            }
                            System.out.println("Lowest Score = " + lowestScore);
                            
                            // 再询问是否重开
                            System.out.println("Do you want to play again (Y=yes, N=no)?");
                            String YorN = in.next();
                            if (YorN.equalsIgnoreCase("Y")) {
                                System.out.println("----------------- New Game -----------------");
                                playAgain = true;
                                // 重置choice状态,进入下一轮游戏
                                choice = " ";
                            } else if (YorN.equalsIgnoreCase("N")) {
                                playAgain = false;
                            } else {
                                System.out.println("Invalid input, game will exit.");
                                playAgain = false;
                            }
                        } else if (choice.equalsIgnoreCase("S") && B.removeTile(die1 + die2)) {
                            legalMove = true;
                        } else if (choice.equalsIgnoreCase("V") && B.removeTiles(die1, die2)) {
                            legalMove = true;
                        } else {
                            System.out.println("Try again.");
                        }
                    }
                }
            }
        }
    }
}
核心修改点说明
  1. 将lowestScore变量移到所有游戏循环的外层,程序运行期间只会初始化一次,永久保留历史最低分记录
  2. 把分数统计逻辑放到用户触发Q退出当前游戏的位置,不管用户选择重开还是彻底退出,都会先输出本次得分和历史最低分
  3. 修正了原代码while (playAgain = true)的笔误,该写法是给变量赋值而非比较,直接使用while (playAgain)即可正常判断循环条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:09