【问题标题】:Value (not index) greater than 3 in array causes java.lang.ArrayIndexOutOfBoundsException数组中大于 3 的值(非索引)导致 java.lang.ArrayIndexOutOfBoundsException
【发布时间】:2012-02-12 01:12:31
【问题描述】:

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

    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 是什么。对不起

【问题讨论】:

  • 请显示出现异常的代码。
  • 这听起来就像你在某个地方使用元素的值作为索引。有点像int x = bumpercatcher[0]; int someOther = bumpercatcher[x];。但是您提供的代码应该没有问题,我们需要更多地了解异常实际发生的位置。
  • 当我设置这些变量时,它就发生了,程序只是冻结在那里。这部分是我初始化所有内容的地方。
  • 没有看到实际的堆栈跟踪,也没有看到异常行在源代码中的位置,我们都只是在这里猜测。请更新您的帖子以包含这两条信息。
  • 我的心理调试可能是准确的。在您的文件中,我看到了for(int j: bumpercatcher) { if(bumpercatcher[j]>5) ... },这正是我最初的评论所针对的内容。 j 是数组的一个元素。您正在使用它作为索引。还有其他类似的循环。

标签: java arrays eclipse exception


【解决方案1】:

您发布的代码文件包含类似于

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

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

如果您想按索引访问,请使用适当的 for 循环编写代码,或者尝试像

那样简单地重构您的逻辑
for (int j : bumpercatcher) {
    if (j > 5) // j is the value!
        ...
}

【讨论】:

  • 非常感谢。我绝对不会想到这一点。
【解决方案2】:

我不确定问题出在哪里,但更易读的方法是使用 for 循环:

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

【讨论】:

    猜你喜欢
    • 2011-12-13
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    相关资源
    最近更新 更多