当前位置: 首页 > 知识库问答 >
问题:

Java数组索引出界4“副本”

东门茂实
2023-03-14

我是Java的新手,正在运行下面的代码,它运行得很好,但是我得到了一个数组索引超出了界限的异常。有人能帮我理解一下为什么我会得到这个例外吗?

public class array {
    public static void main (String[] args)
    {
    int[] b = {1,2,3,4};
    array ar = new array();
    ar.process(b);
    }
    public int process (int[] a)
    {
    int i;
    System.out.println("Length is: " +a.length);
    for(i = 0; i < a.length ; i++) {
    System.out.println("A is : " + a[i] + "  I is" +i);        
    }
    return a[i];
    }        
    }

Exception

Length is: 4
A is : 1  I is0
A is : 2  I is1
A is : 3  I is2
A is : 4  I is3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
        at array.process(array.java:17)
        at array.main(array.java:7)

共有2个答案

班泽语
2023-03-14

当返回语句运行时,for循环已经完成,因此i等于数组a的长度(比有效索引多一个)。更改return语句,如

return a[a.length - 1]; // <-- for the last element in the array.

当然,您没有使用返回的值,因此您可以使方法无效,并且不返回任何东西。由于不使用任何实例字段,您还可以使方法成为静态的(那么您就不需要array的实例...Java的命名惯例是将类名大写,但请不要将类命名为array)。

梁福
2023-03-14

问题是这一行:

return a[i];

因为它在for循环之外,而i变成了4。

你可以做到:

return a[i-1];

要修复它,但您需要澄清为什么要将数组的最后一个元素作为返回值返回。

 类似资料:
  • 因此错误消息如下: 我的代码为 错误在 但我认为数组索引在指针递增后用代码检查ok。是数组越界异常还是其他什么?通常,如果是数组,则错误为。这里的问题似乎是什么?

  • 在此输入图像描述 这是我的代码,我试图解决它5个小时,但我没有得到什么问题,任何人都可以帮助。我也检查了资源,但代码与源代码相同,但它没有运行。

  • 问题内容: 在我的游戏代码中,我尝试添加一张手牌。一旦我做完了,我的数组就超出了范围。一切看起来都不错,但也许我缺少了一些东西。 仅供参考,一个和两个是Player实例。来自Main类的相关代码(对格式感到抱歉。我很想将其传输到Stack Overflow): 卡类: 玩家等级: 问题答案: 问题出在你的循环上 没有其他任何值可设置,因此此循环不断循环,直到所有玩家拥有超过52张牌为止。一旦某人拥

  • 这是我的代码: 该程序的目的是要求用户输入一个字符串,然后统计字符串中每个字符的使用次数。 当我去编译程序时,它工作正常。当我运行程序时,我可以在弹出框中输入字符串,但是在我提交字符串并按确定后,我得到一个错误,说 我不完全确定问题是什么或如何解决。

  • 这似乎微不足道,但也许我对向量的理解并不是它应该是的。我在这段代码上得到[java.lang.ArrayIndexOutOfBoundsException:Array index out of range:1]。错误发生在第3行。既然look是基于向量的大小,那么数组怎么会越界呢? 方法“getChangeSets()”返回一个列表。该列表最初是作为向量创建的。