输入>时出现ArrayIndexOutOfBoundException五

时间:2016-12-30 10:42:26

标签: java arrays

它工作正常,但当我输入的值大于5时,它会给出异常,但不会给我输出。如果我输入12,那么输出应该是这样的(4,5,1,2,3)

public static void main(String args[]) {
        int[] a = { 1 , 2 , 3 , 4 , 5 };
        int[] b = new int[5];
        int j = 0,m = 0;
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter n:");
        int n = sc.nextInt();
        sc.nextLine();
        m = n;

        for(int i = n ; i < 5 ; i++) {
            b[j] = a[i] - n;
            System.out.println("" +b[j]);
            j++;

        }

        for(int i = 0 ; i < n ; i++) {
            b[j] = a[i] - a[i];
            j++;
        }

        for(int k = 0 ; k < 5 ; k++) {
            System.out.println("a["+k+"]:" +b[k]);
        }

1 个答案:

答案 0 :(得分:0)

正如您对问题的评论中所建议的那样,问题在于尝试访问不存在的数组中的元素。

E.g。

int[] array = new int[5];
int boom = array[10]; // Throws the exception

(从What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?复制)

在您的示例中,问题出现在此处的代码中:

for(int i = 0 ; i < n ; i++) {
        b[j] = a[i] - a[i];
        j++;
    }

原因是您将n设置为传入的整数(在示例中为“12”),然后循环遍历i,每次增加它,同时小于n {1}}。

因此,使用'12'的输入,此循环将重复12次,i的值从0增加到11。

在循环内部,您尝试访问i数组中的a元素;只有5个元素。

这适用于循环的前5次迭代(i == 0 ... i == 4),但是在6日(i == 5)它将尝试访问数组中不存在的元素;因此ArrayIndexOutOfBoundException

希望有意义

(另外,请注意:将来包含堆栈跟踪和异常通常是一个好主意)