Java:掷骰子和不正确的总和

Java:掷骰子和不正确的总和,java,arrays,random,Java,Arrays,Random,我正在做一个掷骰子的项目,有点卡住了。我还不熟悉Java编程和使用数组,所以我肯定我把事情搞砸了。最终的目标是输出一个包含掷骰数量的表(我拥有并使用了该表),然后根据掷骰的数量将掷骰总数相加。这张桌子可以用,但我记不清总数。如果我掷4个骰子,我仍然得到1-3的和。有谁能给我一个合作的线索吗?我被卡住了 import javax.swing.*; 导入java.util.Random; 公共类Lab1{ 私有静态int N=0; 私有静态int M=0; 私有静态整数总计=0; 私有静态随机rnd

我正在做一个掷骰子的项目,有点卡住了。我还不熟悉Java编程和使用数组,所以我肯定我把事情搞砸了。最终的目标是输出一个包含掷骰数量的表(我拥有并使用了该表),然后根据掷骰的数量将掷骰总数相加。这张桌子可以用,但我记不清总数。如果我掷4个骰子,我仍然得到1-3的和。有谁能给我一个合作的线索吗?我被卡住了

import javax.swing.*;
导入java.util.Random;
公共类Lab1{
私有静态int N=0;
私有静态int M=0;
私有静态整数总计=0;
私有静态随机rnd=新随机();
专用最终静态int FACENUMBER=6;
私有静态int faceValue=1;
公共标签1(){
}
公共静态void main(字符串[]args){
N=Integer.parseInt(JOptionPane.showInputDialog(“您想掷多少骰子?”);
System.out.println(“骰子:+N”);
M=Integer.parseInt(JOptionPane.showInputDialog(“您希望滚动多少次?”);
系统输出打印项次(“卷:+M);
System.out.println();
整数总计[]=新整数[(M)+1];
对于(int roll=1;roll使用:

您将得到一个介于
1
(FACENUMBER*N)+1

如果用户输入10表示N,则每次滚动都会得到一个介于
1
61
之间的数字,而实际上您需要一个介于
10
60
之间的数字。 你想要的是:

rnd.nextInt((FACENUMBER-1)*N)+N
不过,这不是模拟骰子的正确方式。考虑到掷骰子的方式只有一种,但掷骰子的方式有很多,比如30。下面的解决方案更好:

for(int roll=0; roll<N; roll++) {
  total[roll] = rnd.nextInt(FACENUMBER)+1
}

for(int roll=0;rollArray由索引寻址。例如total[index]。在Java中,索引值从零(0)开始。您的循环“(int roll=1…”跳过第一个值。@DwB:如果不是故意的,则似乎是通过
new int[(M)+1]
roll处理的。如果OP故意从1开始,则这是错误的:"int k=1;kRolling四个6面骰子的分布与滚动一个24面骰子的分布不同。如果要获得正确的行为,需要单独滚动骰子并求和。@DwB:不,那是正确的。数组长度比M大一个。不,结果仍然不正确,因为它没有相同的分布n作为n个独立骰子卷的总和。
rnd.nextInt((FACENUMBER-1)*N)+N
for(int roll=0; roll<N; roll++) {
  total[roll] = rnd.nextInt(FACENUMBER)+1
}