Java掷骰子程序,为什么不掷1?
为我正在做的一个项目创建了这个程序,但我似乎不明白为什么它在结果中从来没有给出任何1。我踢自己在这里,因为它可能是简单的事情 为了清楚起见:程序必须滚动两个单独的模具36k次并显示结果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
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+。