对于在设置数组值时导致ArrayIndexOutOfBoundsException的循环

时间:2013-04-30 17:08:09

标签: java arrays

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

    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。我试过切换所有尝试新变量等等,任何建议都会非常感激!

由于

3 个答案:

答案 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中“可用”。