骰子滚动概率。为什么我的代码在运行程序后显示错误消息?

时间:2014-04-04 20:32:08

标签: java probability dice

我收到了关于骰子概率程序的错误消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 13
at dice.dice.rollDie(dice.java:35)
at dice.dice.main(dice.java:20)

这些是有错误的行:

第13行:int size = inputLine.nextInt();

第35行:返回卷;

第20行:roll2 = rollDie(roll2,size);

import java.util.Scanner;
public class dice 
{
public static void main(String[] args) 
{

    String answer = null;
    do
    {
        System.out.println("Enter number of rolls");
        Scanner inputLine = new Scanner(System.in);             
        int size = inputLine.nextInt(); 

        int[] roll1 = new int [13];
        int[] roll2 = new int [13];
        int[] total = new int [13]; 
        int[] sum = new int[13];
        roll1 = rollDie(roll1, size);
        roll2 = rollDie(roll2,size);
        total = findsum(roll1, roll2,total,size);
        sum = tossSum(sum,total,size);
        displaySum(total,size);
        System.out.println("Continue? y/n");
    } while ("Y".equalsIgnoreCase(answer));

}


public static int[] rollDie(int[] rolls, int number)
{

    for (int i = 0; i < number; i++)
        rolls[i] = (int) (Math.random() * 6 + 1);
    return rolls;
}



public static int[] findsum(int[] roll1, int[] roll2, int[] total,int number)
{

    for (int i = 0; i < number; i++)
        total[i] = roll1[i] + roll2[i];
    return total;
 }



public static int[] tossSum(int[] sum, int[] total, int number)
{
    for (int i = 0; i < number; i++)
        total[sum[i]]++;
    return total;
}



public static void displaySum(int[] total, int number)
{
    System.out.println("Toss \t Count \t probability");
    double  k = number;
    for (int i = 2; i < 13; i++)
        System.out.println(i + "\t" + total[i] + "\t" + (total[i] / k * 100) + "%");
    }
}

感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

您可以为结果创建固定大小为13的数组:

int[] roll1 = new int [13];

但是,您让用户输入的卷数可能大于13。 这导致索引超出范围错误。

您应该使用正确的大小创建数组:

int[] roll1 = new int [size];

答案 1 :(得分:0)

你声明了一个大小为13的数组,所以索引从0到12.我认为你试图掷14个骰子,你应该在之前进行测试:line 20:roll2 = rollDie(roll2,size);
例如:if (size > roll2.size()) { System.out.pritln("error : size too big"); return;}

答案 2 :(得分:0)

int size = inputLine.nextInt();

可能返回13,这是您的数组的大小,但是当您使用该数字访问数组的索引时,您应该执行rollDie(roll2,size-1);。为了获得数组的最后位置。