我收到了关于骰子概率程序的错误消息:
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) + "%");
}
}
感谢任何帮助!
答案 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);
。为了获得数组的最后位置。