Java n面x次滚压m模

Java n面x次滚压m模,java,for-loop,indexoutofboundsexception,dice,Java,For Loop,Indexoutofboundsexception,Dice,好的,所以我改变了我的代码,删除了很多不必要的垃圾。它适用于某些数字,但不适用于其他数字,例如,当我放入100卷/8面/3模时,尽管我为其设置了限制,但它仍会给我一个越界错误。显然,我已经看过一些细节,我只是不知道它是什么细节 public class Ass11f { public static void main(String[] args) { EasyReader console = new EasyReader(); System.out.pr

好的,所以我改变了我的代码,删除了很多不必要的垃圾。它适用于某些数字,但不适用于其他数字,例如,当我放入100卷/8面/3模时,尽管我为其设置了限制,但它仍会给我一个越界错误。显然,我已经看过一些细节,我只是不知道它是什么细节

public class Ass11f {

    public static void main(String[] args) {
        EasyReader console = new EasyReader();
        System.out.print("Enter how many times you want to roll the die: "); 
        int numRolls = console.readInt();
        System.out.print("Enter the amount of sides: ");
        int numSides = console.readInt();           
        System.out.print("Enter the amount of die: ");
        int numDie = console.readInt();     
        int[] rollSum = new int[numDie*numSides];

        for (int i = 0; i<numRolls; ++i)
            {
            int rollCounter=0;
            for (int l = 0; l<numDie; ++l){
                rollCounter += ((int)(Math.random()*numSides)+1);
            }
            rollSum[rollCounter]++;
        }     
        for (int m = 2;m<=rollSum.length;++m) System.out.println(m+"'s: "+rollSum[m]+" times, "+((((double)rollSum[m])/numRolls)*100)+"%");                                                   
    }
}

有两个基本问题:

添加卷总数时,您试图在索引中添加超过数组末尾的最大卷数。简单的解决方法是将数组长度增加1。
打印时,您无法使用等于数组长度的索引访问数组,这就是确切的mWhat为rollSum[rollCounter]++;该怎么办?你能用实际的堆栈跟踪来回答吗?@thegrinner它应该在rollCounter值的rollSum索引处增加元素。你是在跟踪某个值的滚动次数吗?你能澄清最终目标吗?“我在想rollSum的用途时遇到了一点麻烦。@这个程序应该是这样的,就像我说的,用y边z次滚动x个骰子,将每个骰子的总数加起来,并显示每个总数。那么rollSum中的每个项目都是该骰子的总和吗?”?还是累计到那一点的总和?另外,是第一个循环int i还是第二个循环int m给出了一个异常?
    // The minimum value is always numDie.
    // The maximum is always numDie * numSides
    // There are maximum - minimum + 1 possible values (ie 6 on a d6)
    int maximum = numDie * numSides;
    int minimum = numDie;

    // Remember, index zero is now the minimum roll. 
    // The final index is the maximum roll. So the count at an index is really
    // the count for any roll with value index + minimum
    int[] rollSum = new int[maximum - minimum + 1];
    for (int i = numDie; i < rollSum.length; ++i) {
        // Print the first bit, ie "2's: ".
        System.out.print(i + "'s: ");

        // How many times was that value rolled?
        System.out.print(rollSum[i] + " times, ");

        // What percentage is that?
        double percentage = ((double)rollSum[i]) / numRolls * 100;
        System.out.println(percentage + "%");
    }