我正在努力为数组添加一个随机数。我首先创建一个可变大小的数组
String diceAmount = JOptionPane.showInputDialog(null,
"How Many Die Would You Like To Roll Today?");
return x = Integer.parseInt(diceAmount);
int[] diceRoll = new int[x];
然后我尝试用随机数填充数组:
int z = ran.nextInt(5) + 1;
for (int i = 0; i <= x; i++)
diceRoll[x] = z;
但是每当我选择一些骰子然后运行我的actionEvent时,它会返回OutOfBoundsArrayException。我试过切换所有尝试新变量等等,任何建议都会非常感激!
由于
答案 0 :(得分:5)
for (int i = 0; i <= x; i++)
diceRoll[x] = z;
应该是
for (int i = 0; i < x; i++)
diceRoll[i] = z;
答案 1 :(得分:2)
记住你的数组长度是x,所以如果我有一个大小为10的数组并且使用了数组[10],它将通过索引超出范围,因为数组从0开始而不是1.所以在你的循环中你应该使用我作为你的索引,介于0和x-1之间
更改
for (int i = 0; i <= x; i++)
diceRoll[x] = z;
到
for (int i = 0; i < x; i++)
diceRoll[i] = z;
另请注意,您正在为数组的每个索引添加相同的随机数,因此如果随机数为3,则整个diceRoll数组将填充3s。您应该删除变量Z并将数组的每个值设置为新的随机数
diceRoll[i] = z;
到
diceRoll[i] = ran.nextInt(5) + 1;
答案 2 :(得分:1)
也许值得一提(在路易斯的回答之上):
说
x = 6
i starts on 0
length of diceRoll = 6
,自int[] diceRoll = new int[x]
i <= x
会导致7个循环0..1..2..3..4..5..6
,但diceRoll
无法处理7个值。 diceRoll
具有以下密钥0..1..2..3..4..5
。因此设置diceRoll[6]
会产生OutOfBoundsArrayException
。
i < x
会产生6个循环0..1..2..3..4..5
,与diceRoll
上的可用密钥相同。这不会导致OutOfBoundsArrayException
,因为循环期间i
的所有值都在diceRoll
中“可用”。