尝试反转用户输入数组。
我的代码
Scanner s = new Scanner(System.in);
System.out.println("Enter numbers: ");
int[] array = new int[5];
int[] reversed = new int[array.length];
for (int i = 0; i < array.length; i++) {
array[i] = s.nextInt();
reversed[i] = array[array.length - 1 - i];
}
System.out.println(Arrays.toString(reversed));
当我输入时:
10
20
30
40
50
我得到:
output:
[0, 0, 30, 20, 10]
然而,当我硬编码数字时,它运行得很好。
int[] array = {10, 20, 30, 40, 50};
int[] reversed = new int[array.length];
for (int i = 0; i < array.length; i++) {
reversed[i] = array[array.length - 1 - i];
}
System.out.println(Arrays.toString(reversed));
我回来了:
[50, 40, 30, 20, 10]
不确定我在这里做错了什么。我知道还有其他方法可以做同样的事情,但我正在努力弄清楚为什么我这样做会给我带来问题。
只需更改此行:
reversed[i] = array[array.length - 1 - i];
至:
reversed[array.length-1-i] = array[i];
如前所述,您正试图在数组填充之前访问它
您从开始到结束都在填充数组,在填充之前,您正在用array
的值填充reversed
!
具体地说,一旦您尝试填充reversed[0]
,就会使用尚未填充的array[4]
。
您可以通过首先填充array
来克服它,并在第一个循环完成后在第二个循环中开始填充reversed
。
尝试以下代码来实现数组的反转:
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
System.out.println("Enter numbers: ");
int[] array = new int[5];
int[] reversed = new int[array.length];
for (int i = 0; i < array.length; i++) {
array[i] = s.nextInt();
}
int j = array.length;
for (int i = 0; i < array.length; i++) {
reversed[j - 1] = array[i];
j = j - 1;
}
System.out.println("Reversed array is: n");
for (int k = 0; k < array.length; k++) {
System.out.println(reversed[k]);
}
}
}
输出:
Enter numbers:
1
2
3
4
5
Reversed array is:
5
4
3
2
1