我正在制作一个骰子滚动项目,我有点卡住了。我还是Java编程和使用数组的新手,所以我确定我搞砸了。最终目标是输出一个包含卷数(我拥有并工作)的表格,然后根据掷骰子的数量加上骰子卷的总和。表格有效,但我无法获得总和。如果我掷4个骰子,我仍然得到1-3的总和。任何人都可以帮我一起工作吗?我被卡住了! ):
import javax.swing.*;
import java.util.Random;
public class Lab1 {
private static int N = 0;
private static int M = 0;
private static int total = 0;
private static Random rnd = new Random();
private final static int FACENUMBER = 6;
private static int faceValue = 1;
public Lab1() {
}
public static void main(String[] args) {
N = Integer.parseInt(JOptionPane.showInputDialog("How many dice would you like to roll?"));
System.out.println("Dice: " + N);
M = Integer.parseInt(JOptionPane.showInputDialog("How many times would you like to roll?"));
System.out.println("Rolls: " + M);
System.out.println();
int total[] = new int[(M) + 1];
for (int roll = 1; roll <= M; roll++) {
total[roll] = rnd.nextInt(FACENUMBER * N) + 1;
}
System.out.printf("%3s%12s\n", "Rolls", " Sum of Rolls");
for (int k = 1; k < total.length; k++) {
System.out.printf("%3s%12s\n", k, total[k]);
}
}
}
答案 0 :(得分:1)
使用:
rnd.nextInt(FACENUMBER*N)+1;
您在1
和(FACENUMBER*N)+1
如果用户输入10代表N,则当您实际需要1
和61
之间的数字时,每个代码都会在10
和60
之间输入一个数字。
你想要的是:
rnd.nextInt((FACENUMBER-1)*N)+N
这不是模拟骰子的正确方法。为了解释这样一个事实,即只有一种方法可以推动60种,但很多方法可以推动其他总数,例如30.以下解决方案更好:
for(int roll=0; roll<N; roll++) {
total[roll] = rnd.nextInt(FACENUMBER)+1
}