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

JAVAlang.ArrayIndexOutOfBoundsException-索引4超出长度4的界限

东郭弘
2023-03-14

目前,我得到了以下代码的错误。错误是索引4超出了长度4的范围。基本上,我想做的是返回第一个索引,其中数据没有按升序排序。如果对数据进行了排序,该函数将返回数组的长度。例如{10,20,90,5,70}将返回3(90)

    public static int Sorted(int[] data) {
    if (data == null)
        return -1;
    for (int i = 0; i < data.length; i++) {
        if (data[i + 1] < data[i])
            return (i + 1);
    }
    return -1;
}

我使用的测试用例如下:

    @Test
public void testSorted() {
    assertEquals(-1, Stage1.partSorted(null));
    assertEquals(1, Stage1.partSorted(new int[] { 90, 20, 40, 100 }));
    assertEquals(4, Stage1.partSorted(new int[] { 10, 20, 40, 100 }));
    assertEquals(3, Stage1.partSorted(new int[] { 10, 20, 90, 70 }));
    assertEquals(4, Stage1.partSorted(new int[] { 20, 20, 30, 40, 5, 70, 90, 80 }));

任何帮助或线索都将不胜感激。

共有3个答案

祁正阳
2023-03-14

java中,n长度数组的索引是{0,…n-1}。

在你的if语句if(数据[i 1]

原因如下:对于i变量,你迭代{0,…,n-1},这意味着对于i 1,你迭代{1,…,n}。当你试图访问I1=n的数据[I1]时,你从索引中出来,计算机说:嘿,没有第n个元素!

总之,您不应该将最后一个(第n-1个)元素与第n个(不存在的)元素进行比较。应该迭代{0,…,n-2}的i。

因此,您应该将for循环更改为:

for (int i = 0; i < data.length - 1; i++) {
        if (data[i + 1] < data[i])
            return (i + 1);
}

汲丰茂
2023-03-14

因为在每次迭代中你都要面对下一个索引,所以你应该在最后一个索引之前中断循环,所以你的条件应该是i

此外,如果要返回数组长度(如果数组按升序排序),则还需要修复上一条return语句。

固定代码应如下所示:

public static int Sorted(int[] data) {
    if (data == null)
        return -1;
    for (int i = 0; i < data.length - 1; i++) {
        if (data[i + 1] < data[i])
            return (i + 1);
    }
    return data.length;
}

上官锦
2023-03-14

当“i”到达最后一个索引时,“i 1”超出数组长度。试试这个:

public static int Sorted(int[] data) {
    if (data == null)
        return -1;
    for (int i = 0; i < data.length - 1; i++) {
        if (data[i + 1] < data[i])
            return (i + 1);
    }
    return -1;
}
 类似资料:
  • 在此输入图像描述 这是我的代码,我试图解决它5个小时,但我没有得到什么问题,任何人都可以帮助。我也检查了资源,但代码与源代码相同,但它没有运行。

  • 我正在努力创造这个游戏https://en.wikipedia.org/wiki/Conway然而,每当我尝试使用printBoard方法时,我都会遇到以下错误 线程“main”java中出现异常。lang.ArrayIndexOutOfBoundsException:索引5超出长度5的界限。 我怎样才能解决这个问题?谢谢

  • 更新:原来我不得不再次导出一个SVG,并把它放在我文件的数据文件夹中。 我再次面临一个编码问题。抱歉,如果格式不正确,我还需要改进我的编码问题的措辞方式。 ArrayIndexOutOfBoundsException:索引30超出长度30的界限意味着什么?我已经试着自己去查了,但似乎找不到它的意思。 起初,当我添加svg时,代码正常工作,然后我再次添加了同样的文件,也正常工作(Eye2、pupil

  • 我不明白为什么会发生这个错误。m1.length和m1[0].length打印行和列的正确长度。我给出了以下投入: 然后发生了错误

  • 我使用的是一个3D数组,下面的代码是我得到的数组索引超出界限的错误,下面是相同的代码:- 获取以下错误:- 线程“main”Java.lang.ArrayIndexOutOfBoundsException中出现异常:索引0超出了Array2d.TugasArray3.Main(TugasArray3.:27)得分Mid Test1 Ke-1

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