2012-02-12 24 views
0

我是新手程序员。这可能是一个简单的问题,但我从来没有见过这个。首先,让我澄清一点,我甚至不试图操纵指数。下面是导致异常的代码的一部分:数组中的值(非索引)大于3会导致java.lang.ArrayIndexOutOfBoundsException

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班,不好的编程practies)整个代码:http://dl.dropbox.com/u/33501308/Pong.java

下面是你可以从(不多见的程序的HTML它只是立即冻结。):http://dl.dropbox.com/u/33501308/bin.zip

顺便说一句,我使用的是日食。

我真的不知道SSCEE是什么。对不起

+0

请出示在出现异常的代码写一个适当的循环代码。 – 2012-02-12 01:15:59

+0

它几乎听起来像你正在使用元素的值作为索引的地方。有点像'int x = bumpercatcher [0]; int someOther = bumpercatcher [x];'。但是,你所提供的代码应该没有问题,我们需要更多地了解发生异常的位置。 – 2012-02-12 01:18:21

+0

恰好当我设置这些变量时,程序就冻结在那里。这部分是我初始化一切的地方。 – kevinyoki 2012-02-12 01:21:12

回答

1

您发布的代码文件包括沿

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

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

,如果你想通过索引来访问,或尝试简单的重组你的逻辑就像

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

非常感谢。我从来没有想到这一点。 – kevinyoki 2012-02-12 02:08:04

0

我不知道是什么问题,但这样做的更具可读性的方式是用一个for循环:

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