Java掷骰子程序,为什么不掷1?

Java掷骰子程序,为什么不掷1?,java,Java,为我正在做的一个项目创建了这个程序,但我似乎不明白为什么它在结果中从来没有给出任何1。我踢自己在这里,因为它可能是简单的事情 为了清楚起见:程序必须滚动两个单独的模具36k次并显示结果 import java.util.Random; //Going to need this public class Dicerolling { //Start Class public static void main( String[] args) { //Start of Main Ran

为我正在做的一个项目创建了这个程序,但我似乎不明白为什么它在结果中从来没有给出任何1。我踢自己在这里,因为它可能是简单的事情

为了清楚起见:程序必须滚动两个单独的模具36k次并显示结果

import java.util.Random; //Going to need this

public class Dicerolling { //Start Class



public static void main( String[] args) 
{ //Start of Main
    Random randomNumbers = new Random(); // Generates random numbers
    int[] array = new int[ 13 ]; // Declares the array
    int dice1 = 0;
    int dice2;
    int total;

    //Roll the die 36,000 times
    for ( int roll = 1; roll <=36000; roll++ )
        dice1 = 1 + randomNumbers.nextInt ( 6 );
        dice2 = 1 + randomNumbers.nextInt ( 6 );
        total = dice1+dice2;
        ++array[total];

    System.out.printf( "%s%10s\n", "Face", "Frequency" );

    // outputs array values
    for ( int face = 1; face < array.length; face++ )
        System.out.printf( "%4d%10d\n", face, array[ face ] );

    //There we go

} // end main


}//End of Class

这些评论回答了你的问题。从数学上讲,两个骰子(按常规编号,六边)之和不可能是1

但您的程序中还有一个严重的错误:

for ( int roll = 1; roll <=36000; roll++ )
    dice1 = 1 + randomNumbers.nextInt ( 6 );
    dice2 = 1 + randomNumbers.nextInt ( 6 );
    total = dice1+dice2;
    ++array[total];
。。。缩进不正确,并且不正确的缩进隐藏了一个bug。问题是for循环以第一个分号结束,最后3条语句不是循环的一部分

您需要使用大括号:

for ( int roll = 1; roll <=36000; roll++ ) {
    dice1 = 1 + randomNumbers.nextInt ( 6 );
    dice2 = 1 + randomNumbers.nextInt ( 6 );
    total = dice1+dice2;
    ++array[total];
}
两项一般性建议:

始终将大括号与if和loop语句一起使用1。这样,您就不太可能用缩进错误的代码来愚弄自己

使用自动缩进代码的IDE


1-有些人不喜欢这样做,但我的经验是,在这种情况下,额外的语法噪音是一件好事。当你在压力下工作时,像这样愚蠢的错误很难被发现。

你说它不给1是什么意思?你在掷两个骰子。你能得到的最低掷骰数是2。你的背带在哪里?你知道,这不是PythonP如前所述,你将掷一个骰子36000次,然后掷另一个骰子一次,并记录这一次掷骰。除非你的骰子值为0,否则你可以得到1甚至更多0@RafaEl符合事实的但这些在开始时总是有一个1+。