Java:骰子滚动和不正确的总和

时间:2014-02-05 20:27:54

标签: java arrays random

我正在制作一个骰子滚动项目,我有点卡住了。我还是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]);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

使用:

rnd.nextInt(FACENUMBER*N)+1;

您在1(FACENUMBER*N)+1

之间得到一个随机数

如果用户输入10代表N,则当您实际需要161之间的数字时,每个代码都会在1060之间输入一个数字。 你想要的是:

rnd.nextInt((FACENUMBER-1)*N)+N

这不是模拟骰子的正确方法。为了解释这样一个事实,即只有一种方法可以推动60种,但很多方法可以推动其他总数,例如30.以下解决方案更好:

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