Java中的数组:java.lang.ArrayIndexOutOfBoundsException

时间:2019-06-06 13:05:00

标签: java

在研究Java中的Array时,我遇到了这个问题,并搜索了错误消息

"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
        at Main.main(Main.java:12)"

并阅读一些有关它的文章。

我知道索引从0开始,所以它将以n-1(n is the allocated size)结尾。但是我仍然没有在我的代码中发现问题。如果您能帮助我,这对我来说将有很多意义,因为数组是令人困惑的一部分。

我需要返回输出:

1
3
5
7
9
2
4
6
8
10

这就是我写的。

import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
    int [] oddArray = new int[5];
    int [] evenArray = new int[5];

    int k = 0;

    do {
        k++;

        oddArray[k] = k + 1;

        evenArray[k] = k + 2;


    }while(k <= 10);


    for(int j = 0 ; j < 5 ; j++) {
        System.out.println(oddArray);
    }

    for(int j = 0 ; j < 5 ; j++) {
        System.out.println(evenArray);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

请注意,在第一次将其与“ k ++;”一起使用之前,要先增加k。线。因此,当您为oddArray和evenArray分配值时,索引从1开始到5超出范围。

while循环中也有and错误。您正在检查10,应该检查5。

while(k < 5);

将k ++移动到分配之后,修复while循环检查,它应该可以工作。

答案 1 :(得分:0)

您需要分隔k和数组索引。否则,在k=5上将6添加到oddArray[5]中,这是没有限制的。

我会说这样的话

        final int ARR_SIZE = 5;
        int [] oddArray = new int[ARR_SIZE];
        int [] evenArray = new int[ARR_SIZE];

        int k = 0, index = 0;

        do {
            oddArray[index] = k + 1;
            evenArray[index] = k + 2;
            index++;
            k+=2;
        }while(index < ARR_SIZE);


        for(int j = 0 ; j < ARR_SIZE ; j++) {
            System.out.println( oddArray[j]);
        }

        for(int j = 0 ; j < ARR_SIZE ; j++) {
            System.out.println(evenArray[j]);
        }