Java 为什么我会收到ArrayIndexOutofBoundsException?

Java 为什么我会收到ArrayIndexOutofBoundsException?,java,indexoutofboundsexception,Java,Indexoutofboundsexception,在我的JAVA代码中,给了我一个数据,我必须找到模式。一切都成功编译,每个方法都有效。但是,当我尝试访问该模式时,我在终端窗口中得到一个java.lang.ArrayIndexOutOfBoundsException:987。突出显示的部分在以下方法中,这是我的max方法之一。顺便说一下,数据数组就是int[]data public int maxOfData(int [] oa) { int max = oa[0]; for (int i = 1; i < size; i

在我的JAVA代码中,给了我一个数据,我必须找到模式。一切都成功编译,每个方法都有效。但是,当我尝试访问该模式时,我在终端窗口中得到一个
java.lang.ArrayIndexOutOfBoundsException:987
。突出显示的部分在以下方法中,这是我的max方法之一。顺便说一下,数据数组就是
int[]
data

public int maxOfData(int [] oa)
{
    int max = oa[0];
    for (int i = 1; i < size; i++)
    {
        if (oa[i] > max)
        max = oa[i];
    }
    return max;
}
我的
数据
的另一个最大值相同,但是
数据
而不是
oa
。我的老师说,我需要两种max方法,就像那样。那我该怎么办?我该怎么解决这个问题呢?

我想这条线

for (int i = 1; i < size; i++)
for(int i=1;i
应该是

for (int i = 1; i < oa.length; i++)
for(int i=1;i
引发ArrayIndexOutOfBound异常,以指示已使用非法索引访问数组。索引为负数或大于或等于数组的大小。每当迭代数组对象时。您需要在检查索引是否始终小于其长度时进行迭代

比如说,

    for(int i=1;i<array.length;i++){
    //access array content in ith position
    System.out.println(array[i]);
    }

for(int i=1;i查看存储在size中的数字,然后查看您声明的
oa[]
大小。如果大小大于
oa[]
的大小,则您有问题。

问题在代码的这一部分

int max = oa[0];

for (int i = 1; i < size; i++)
{
    if (oa[i] > max)

    max = oa[i];
}

如果输入数组为空,则不应处理它。

访问模式是什么意思?函数调用modeOfData()?大小是什么?在
maxOfData(int[]oa)中
检查数组的边界条件。还有什么是
size
?maxOfData中的大小未声明-为什么粘贴不应编译的代码?索引“0”如何?如果这是问题,为什么不只返回oa.length而不返回max?max是数组的内容,而不是数组的长度array@RafaEl-数组未排序ed.max元素不一定在末尾。此外,
oa[oa.length]
保证在循环OP之前抛出
ArrayIndexOutOfBoundsException
(或者
NullPointerException
如果
oa
null
),分配oa[0]为了最大化,在OP的代码中不必从0开始,我们不知道
size
是什么。它可能小于
oa.length
,这意味着您的代码将计算与预期不同的内容。同意,它可能是堆的大小(堆表示为数组)数组中的元素。可以对此应用附加检查,但对于给定的问题,没有说明
大小
变量。我个人认为上面的代码很混乱。a)没有
其他,如果需要的话b)与OP一样。将oa[0]指定给max,则循环是干净且易于遵循的。如果(oa.length>1),您仍然不需要
{
删除它,因为您基本上与我的答案相同。
int max = oa[0];

for (int i = 1; i < size; i++)
{
    if (oa[i] > max)

    max = oa[i];
}
  public int maxOfData(int[] oa) {
    if (oa == null) {
        throw new IllegalArgumentException("Input array is null");
    }
    int max=oa[0];
        for (int i = 1; i < oa.length; i++) {
            if (oa[i] > max)
                max = oa[i];
        }
    return max;
}