它工作正常,但当我输入的值大于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]);
}
答案 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
希望有意义
(另外,请注意:将来包含堆栈跟踪和异常通常是一个好主意)