数组中的值(不是索引)大于3会导致java.lang.ArrayIndexOutOfBoundsException

时间:2012-02-12 01:12:31

标签: java arrays eclipse exception

我是一名新手程序员。这可能是一个简单的问题,但我以前从未见过这个问题。首先,让我澄清一点,我甚至都没有试图操纵指数。以下是导致异常的代码部分:

    int[] bumpercatcher = new int[4];


//time variable that helps control events
int time = 0;

public void setup()
{
    bumpercatcher[0]=4;
    bumpercatcher[1]=4;
    bumpercatcher[2]=4;
    bumpercatcher[3]=4;

正如你所看到的,我正试图在程序开始时将它们全部设置为4。这会导致arrayindexoutofbounds异常。如果我将它们全部设置为等于0~3则没有问题(直到我在程序中将它们设置为大于3的值)。我不明白。

- 如果我将数组大小设置为10并不重要,我仍然会得到相同的异常

- 如果我只设置其中一个值(即在索引1处,这是绝对在数组的范围内),则无关紧要。相同的例外

我有什么问题吗?感谢。

好吧,这里是整个代码,如果你想看一下(不太长,1级,糟糕的编程实践):http://dl.dropbox.com/u/33501308/Pong.java

这是你可以从中看到该程序的html(不多见。它只是立即冻结。):http://dl.dropbox.com/u/33501308/bin.zip

顺便说一句,我正在使用eclipse。

我真的不知道SSCEE是什么。遗憾

2 个答案:

答案 0 :(得分:1)

您发布的代码文件包含

行的循环
for(int j: bumpercatcher) { 
    if(bumpercatcher[j]>5) 
       ... 
}

这是一个问题。这是一种与传统for循环不同的循环。它是一个扩展或增强的,也称为 foreach 。它读取“对于数组bumpercatcher do x中的每个整数j”。您正在获取元素j(值)并将其用作数组的索引。当您的值超过最大索引时,您将获得异常。

如果您想通过索引访问,请使用正确的for循环编写代码,或者尝试简单地重构逻辑,如

for (int j : bumpercatcher) {
    if (j > 5) // j is the value!
        ...
}

答案 1 :(得分:0)

我不确定问题是什么,但更容易理解的方法是使用for循环:

for(int i = 0; i < bumpercatcher.length; i++) {
    bumpercatcher[i] = 4;
}