【问题标题】:Loop with Dice rolling program, previous roll and double check使用骰子滚动程序循环,前一次滚动和双重检查
【发布时间】:2013-05-09 10:28:56
【问题描述】:

我敢肯定,对大多数人来说,这是一个相当微不足道的问题,但我无法完全弄清楚我是如何让前一个骰子整数与程序中的前一掷骰子保持相同的。我认为代码是相当不言自明的,这是一个如此琐碎的程序,我因为无法理解它而自责。

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 次模拟。掷两个骰子。如果你掷出双重退出。如果您在当前掷骰中掷出的总和与前一次掷骰的总和相同,则退出。我已经尝试通过打印出之前的骰子总数来进行调试,但每次都默认为零。

【问题讨论】:

    标签: java dice


    【解决方案1】:

    您只想将 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;
    

    【讨论】:

    • 感谢您的建议,尽管我的 System.out.println 仍然告诉我 prevDiceTotal 的值为 0。
    • 仅用于第一次通过(它应该是零或其他一些表示此时未设置的数字)。如果循环不止一次,则值正确
    • 即使在循环之后它也保持 0 的值。这个值永远不会改变。这也意味着 diceTotal 和 prevDiceTotal 永远不会相同,因此循环只会因为 double 而退出。
    • 抱歉,我不小心包含了 prevDiceTotal = diceTotal;偶然在if循环中。我很惭愧。
    【解决方案2】:

    你有以下:

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

    正如现在所写,它保证if-expressionTrue

    将作业移到您的if之后

    【讨论】:

      【解决方案3】:

      这是一个好的 IDE 可以帮助您的地方。这是 IntelliJ IDEA(有免费的Community Edition)为您的代码显示的内容。请注意if() 语句的突出显示以及问题描述。

      正如其他人所说,将prevDiceTotal 的分配移到if() 块之后以解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-14
        • 1970-01-01
        • 2019-03-05
        • 2015-07-19
        • 2013-09-17
        • 1970-01-01
        相关资源
        最近更新 更多