Цикл с программой броска игральных костей, предыдущий бросок и двойная проверка

Я уверен, что для большинства это довольно тривиальная проблема, но я не могу понять, как я должен заставить предыдущее целое число кубиков оставаться таким же, как и предыдущий бросок кубика в программе. Я думаю, что код довольно понятен, и это настолько тривиальная программа, что я корю себя за то, что не могу понять это.

import java.util.Random;

public class Dice {

    public static void main(String[] args) {
        Random rand = new Random();
        int min = 1;
        int max = 6;
        int loop = 0;
        int diceRollOne = 0;
        int diceRollTwo = 0;
        int diceTotal = 0;
        int prevDiceTotal = 0;

        while (loop < 15000) {
            loop++;
            diceRollOne = rand.nextInt(max - min + 1) + min;
            diceRollTwo = rand.nextInt(max - min + 1) + min;
            diceTotal = diceRollOne + diceRollTwo;

            System.out.println("Dice Roll 1: " + diceRollOne);
            System.out.println("Dice Roll 2: " + diceRollTwo);
            System.out.println("Dice Total: " + diceTotal);
            System.out.println("previous total: " + prevDiceTotal);

            prevDiceTotal = diceTotal;

            if (diceRollOne == diceRollTwo || diceTotal == prevDiceTotal) {
                System.out.println("After " + loop + " loops the");
                System.out.println("Numbers Match, YOU GET NOTHING, YOU LOSE, GOOD DAY SIR!");
                System.exit(0);
            }
        }
    }
}

Основная идея — 15 000 симуляций. Бросьте два кубика. Если вы выбросите двойной бросок. Если вы бросаете ту же сумму в текущем броске, что и сумма предыдущего броска, тогда выходите. Я пытался выполнить отладку, распечатав предыдущее общее количество кубиков, но по умолчанию оно каждый раз равно нулю.


person Timothy Ford    schedule 15.05.2013    source источник


Ответы (3)


Вы просто хотите переместить prevDiceTotal = diceTotal; после вашего оператора if.

        if (diceRollOne == diceRollTwo || diceTotal == prevDiceTotal) {
            System.out.println("After " + loop + " loops the");
            System.out.println("Numbers Match, YOU GET NOTHING, YOU LOSE, GOOD DAY SIR!");
            System.exit(0);
        }

        prevDiceTotal = diceTotal;
person greedybuddha    schedule 15.05.2013
comment
Спасибо за предложение, хотя мой System.out.println по-прежнему говорит мне, что значение prevDiceTotal равно 0. - person Timothy Ford; 15.05.2013
comment
Только для первого прохода (где он должен быть равен нулю или другому числу, которое не было установлено в это время). Если он повторяется более одного раза, значение правильное - person greedybuddha; 15.05.2013
comment
Даже после зацикливания он сохраняет значение 0. Значение никогда не меняется. Это также означает, что diceTotal и prevDiceTotal никогда не могут совпадать, поэтому цикл завершится только из-за двойного значения. - person Timothy Ford; 15.05.2013
comment
Мои извинения, я случайно включил prevDiceTotal = diceTotal; в цикле if случайно. Мне стыдно. - person Timothy Ford; 15.05.2013

У вас есть следующее:

prevDiceTotal = diceTotal;

if(diceRollOne == diceRollTwo || diceTotal == prevDiceTotal){

Как написано сейчас, это гарантирует, что if-expression будет True.

Переместите задание после блока if.

person PM 77-1    schedule 15.05.2013

В этом вам может помочь хорошая IDE. Вот что IntelliJ IDEA (у которого есть бесплатная Community Edition) показывает ваш код. Обратите внимание на выделение оператора if() вместе с описанием проблемы.

Снимок экрана IntelliJ

Как уже говорили другие, переместите назначение prevDiceTotal после блока if(), чтобы решить проблему.

person Jeff Olson    schedule 15.05.2013