Java骰子滚动与意外的随机数

f_q*_*_qi 3 java if-statement

我写了一个简单的Java程序来在控制台上显示20个骰子卷的结果.我得到的结果如下:

3
1
java.util.Random@62efae3b
1
5
4
1
java.util.Random@62efae3b
1
java.util.Random@62efae3b
java.util.Random@62efae3b
1
6
java.util.Random@62efae3b
1  
java.util.Random@62efae3b
java.util.Random@62efae3b
1
2
3
3
Run Code Online (Sandbox Code Playgroud)

当我运行它几次时,"@"之后的字符串是不同的,但基本上是相同的格式.我做错了什么?

这是代码:

import java.util.Random;

public class QiProb3 {

    public static void main(String[] args) {

        Random diceNumber = new Random();

        for (int count = 0; count <= 20; count++) {
            if ((diceNumber.nextInt(6) + 1) == 1) {
                System.out.println("1");
            } else if ((diceNumber.nextInt(6) + 1) == 2) {
                System.out.println("2");
            } else if ((diceNumber.nextInt(6) + 1) == 3) {
                System.out.println("3");
            } else if ((diceNumber.nextInt(6) + 1) == 4) {
                System.out.println("4");
            } else if ((diceNumber.nextInt(6) + 1) == 5) {
                System.out.println("5");
            } else if ((diceNumber.nextInt(6) + 1) == 6) {
                System.out.println("6");
            } else {
                System.out.println(diceNumber);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

alm*_*OSU 6

else {
    System.out.println(diceNumber);
}
Run Code Online (Sandbox Code Playgroud)

您正在diceNumber通过toString()在else子句中调用其默认函数来打印地址.
这就是你得到的原因java.util.Random@62efae3b

更关键的问题,为什么它得到了"其他"条款,我相信这不是你的意图.
注意:在问题中,每个if/else if子句中都会生成一个新数字,这就是代码实际到达最后一个else子句的原因.

你应该做的是:

for (int count = 0; count < 20; count++) {

    int rollValue = diceNumber.nextInt(6) + 1;

    if (rollValue == 1) {
        System.out.println("1");
    } else if (rollValue == 2) {
        System.out.println("2");
    } else if (rollValue == 3) {
        System.out.println("3");
    } else if (rollValue == 4) {
        System.out.println("4");
    } else if (rollValue == 5) {
        System.out.println("5");
    } else if (rollValue == 6) {
        System.out.println("6");
    } else {
        // This else is now redundant
        System.out.println(diceNumber);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者更简单的方法是:

// count < 20 instead of count <= 20
for (int count = 0; count < 20; count++) {

    int rollValue = diceNumber.nextInt(6) + 1;
    System.out.println(rollValue);
}
Run Code Online (Sandbox Code Playgroud)

感谢'Elliott Frisch'意识到循环执行了21次而不是20次.

  • 为优雅的方法+1并解决更重要的"为什么"问题.为清楚起见,用简单的英语拼出发生的事情可能会很好(即"如果第一卷不是1,再次滚动;如果下一卷不是2,再滚动等等......) (2认同)