1

我正在向数组添加一个随机数。我首先创建一个可变大小的数组

    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。我已经尝试过切换所有尝试新变量等的东西,任何建议都将不胜感激!

谢谢

4

3 回答 3

5
for (int i = 0; i <= x; i++)
  diceRoll[x] = z;

应该

for (int i = 0; i < x; i++)
  diceRoll[i] = z;
于 2013-04-30T17:08:35.627 回答
2

记住你的数组长度是 x,所以如果我有一个大小为 10 的数组并使用 array[10],它会通过索引超出范围,因为数组从 0 而不是 1 开始。所以在你的循环中,你应该使用 i 作为你的索引并在 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 数组将被 3 填充。您应该删除变量 Z 并将数组的每个值设置为一个新的随机数

diceRoll[i] = z; 

diceRoll[i] = ran.nextInt(5) + 1;
于 2013-04-30T17:23:28.700 回答
1

也许值得一提(在路易斯的回答之上):

  • x = 6
  • i starts on 0
  • length of diceRoll = 6, 自从int[] diceRoll = new int[x]

i <= x0..1..2..3..4..5..6虽然diceRoll无法处理 7 个值,但会导致 7 个循环。diceRoll有以下可用的键0..1..2..3..4..5。因此,设置diceRoll[6]将导致OutOfBoundsArrayException.

i < x将导致 6 个循环0..1..2..3..4..5,与上的可用键相同diceRoll。这不会导致,因为在循环期间的OutOfBoundsArrayException所有值在.idiceRoll

于 2013-04-30T17:15:12.187 回答