Java 数组反转任务编译错误 - 索引越界异常:2



我正在尝试反转数组;我输入数组的长度比它的所有值。之后,我试图像这样反转它:a[i] = a[al - i] 在"for construction" - for(int i = o; i <al;>我在那里做错了什么?完整代码:

package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s1 = new Scanner(System.in);
int al = s1.nextInt();
int a[] = new int[al];
for (int i = 0; i < al; i++) {
a[i] = s1.nextInt();
}
for(int i = 0; i < al; i++) {
a[i] = a[al - i];
}
for(int i = 0; i < al; i++) {
System.out.println(a[i]);
}
}
}

程序的问题描述:

for(int i = 0; i < al; i++) {
//let al=5, so index of a will be 0..4
//so for first iteration i=0
//so a[5-0] i.e: a[5] where 5 is index out of bound
a[i] = a[al - i];
}

问题的解决方案,但此逻辑不会反转您的数组数据:

for(int i = 0,j=al-1; i < al; i++,j--) {
a[i] = a[j];
}

要反转数组数据,您必须像这样使用:

for (int i = 0, j = al - 1; i < j; i++, j--) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}

所以,整个解决方案,

package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s1 = new Scanner(System.in);
int al = s1.nextInt();
int a[] = new int[al];
for (int i = 0; i < al; i++) {
a[i] = s1.nextInt();
}
for (int i = 0, j = al - 1; i < j; i++, j--) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
for (int i = 0; i < al; i++) {
System.out.println(a[i]);
}
}
}

最新更新