Java 不断循环的掷骰子游戏

Java 不断循环的掷骰子游戏,java,do-while,Java,Do While,我正在做Java编程课程分配给我的一项任务,我对Java相当陌生。只要不触发do while语句,程序中的一切都可以正常运行,这时它开始循环失控,说“youroll:7 you lose” import java.util.Scanner; //Importing the java.util class Scanner public class Craps { private Die die1; private Die die2; public Craps() {

我正在做Java编程课程分配给我的一项任务,我对Java相当陌生。只要不触发do while语句,程序中的一切都可以正常运行,这时它开始循环失控,说“youroll:7 you lose”

import java.util.Scanner; //Importing the java.util class Scanner

public class Craps {
    private Die die1;
    private Die die2;

    public Craps() {
        die1 = new Die();
        die2 = new Die();
    }

    private void rollDice() {
        die1.roll();
        die2.roll();
    }

    private int getSum() {
        return die1.getNumber() + die2.getNumber();
    }

    private int getSum2() {
        return die1.getNumber() + die2.getNumber();
    }

    public void playRound() {
        rollDice();
        int sum = getSum();
        int sum2 = getSum2();

        System.out.println("You rolled: " + sum);

        if (sum == 7 || sum == 11) {
            System.out.println("You Win");
        }

        if (sum == 2 || sum == 3 || sum == 12) {
            System.out.println("You Lose");
        } else if (sum == 4 || sum == 5 || sum == 6 || sum == 8 || sum == 9 || sum == 10) {
            System.out.println("Establishing the point, Re-rolling...");
            rollDice();
            sum2 = getSum2();
            do {
                if (sum2 == 7) {
                    System.out.println("You rolled: " + sum2);
                    System.out.println("You lose");
                }
                if (sum2 == sum) {
                    System.out.println("You rolled: " + sum2);
                    System.out.println("You win!!!");
                }
            }
            while (sum2 != sum || sum2 != 7);
        }
    }

    public static void main(String[] args) {

        Craps game = new Craps();

        System.out.println("Welcome to the game of Craps!!!");
        System.out.println("Rules: ");
        System.out.println("Rolling a 7 or 11 will win you the game");
        System.out.println("Subsequently rolling 2, 3, or 12 will lose you the game");
        System.out.println("If you roll a 4, 5, 6, 8, or 10 you will 'Establish the point'");
        System.out.println("Establishing the point allows you to set a new winning number and reroll");
        System.out.println("When you establish the point, the goal is to not roll a 7 and instead roll");
        System.out.println("the established number, rolling after establishing a point 7 now will");
        System.out.println("result in a loss");

        String ans = null;
        Scanner scan = new Scanner(System.in);
        do {
            game.playRound();
            ans = scan.nextLine();
        }
        while (ans.equalsIgnoreCase("Yes"));
    }
}
编辑我的模具类

import java.util.Random;

public class Die {
    private int number;
    private Random generator;

    public Die() {
        generator = new Random();
        roll();
    }

    public int getNumber() {
        return number;
    }

    public void roll() {
        number = generator.nextInt(6) + 1;
    }
}
sum和sum2在do/while循环中永远不会更新,因此一旦进入循环,就永远无法退出

do {
    if (sum2 == 7) {
        System.out.println("You rolled: " + sum2);
        System.out.println("You lose");
    }
    if (sum2 == sum) {
        System.out.println("You rolled: " + sum2);
        System.out.println("You win!!!");
    }
}
while (sum2 != sum || sum2 != 7); // Condition never changes
另一个很好的模式是利用返回短路:

while (true) {
    rollBabyRoll();
    if (getSum2() == 7) {
        // Log
        return;
    else if (getSum() == sum) {
        // Log
        return;
    }
}
奖金

作为另一个小提示,我一点也不懂废话,但您可能想考虑改用递归

private void reroll(int sum) {
    rollDice();
    int sum2 = getSum2();
    if (sum2 == 7) {
        // Do something
    else if (sum2 = sum) {
        // Do something
    } else {
        reroll(sum);
    }
}

那么问题是什么呢?你没有在do/while循环中滚动你的骰子,所以数字永远不会改变。@MercifulGiraffe非常感谢你!!真不敢相信我竟然错过了!