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

双人Java骰子游戏循环无法终止问题求助

解决双人骰子游戏的无限循环问题

嘿,我看你在开发这款双人骰子游戏时碰到了无限循环的问题,别慌,咱们一起来捋清楚怎么解决~

问题分析

你提到每轮玩家要扣除10点积分才能掷骰子,那合理的终止逻辑应该是:当任意一位玩家的积分不足10点,没法支付下一轮的成本时,游戏结束。你遇到的无限循环大概率是因为do-while循环的终止条件没设置对——毕竟这种循环是先执行代码块,再判断要不要继续跑,如果终止条件永远为真,循环就会停不下来。

具体解决方案

我给你整理了修正后的代码,重点补全了循环的终止条件,同时完善了每轮的积分逻辑:

public class DiceGameC {
    private static Die die = new Die(12);
    private static Player p1 = new Player("Wasi");
    private static Player p2 = new Player("Pruthvi");

    public static void main(String[] args) {
        // 初始化两位玩家的初始积分都是100
        p1.setScore(100);
        p2.setScore(100);

        do {
            // 处理玩家1的回合:先扣10点,再掷骰子加积分
            p1.setScore(p1.getScore() - 10);
            int diceSum1 = die.roll() + die.roll();
            p1.setScore(p1.getScore() + diceSum1);
            System.out.println(p1.getName() + "掷出了" + diceSum1 + ",当前积分:" + p1.getScore());

            // 处理玩家2的回合:同样先扣后加
            p2.setScore(p2.getScore() - 10);
            int diceSum2 = die.roll() + die.roll();
            p2.setScore(p2.getScore() + diceSum2);
            System.out.println(p2.getName() + "掷出了" + diceSum2 + ",当前积分:" + p2.getScore());

        // 核心终止条件:只有两位玩家都有≥10点积分时,才继续下一轮
        } while (p1.getScore() >= 10 && p2.getScore() >= 10);

        // 循环结束后,判断最终胜负
        if (p1.getScore() > p2.getScore()) {
            System.out.println(p1.getName() + "获胜!最终积分:" + p1.getScore());
        } else if (p2.getScore() > p1.getScore()) {
            System.out.println(p2.getName() + "获胜!最终积分:" + p2.getScore());
        } else {
            System.out.println("平局!两位玩家最终积分都是:" + p1.getScore());
        }
    }
}

// 补充Die类的基础实现(假设你之前的Die类逻辑类似)
class Die {
    private int sides;

    public Die(int sides) {
        this.sides = sides;
    }

    // 生成1到sides之间的随机点数
    public int roll() {
        return (int) (Math.random() * sides) + 1;
    }
}

// 补充Player类的基础实现(假设你之前的Player类逻辑类似)
class Player {
    private String name;
    private int score;

    public Player(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
}

关键说明

  • 循环的终止条件while(p1.getScore() >=10 && p2.getScore() >=10):只有当两个玩家都能支付下一轮的10点成本时,才继续循环;只要有一个玩家积分不够,循环就立刻终止。
  • 每轮的积分逻辑:先扣除10点(符合你设定的规则),再根据骰子总和添加对应积分,流程更清晰不易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:25:28