for
需要固定循环的第二个参数以提供布尔表达式:i < n/2
- 交换元素时,最后一个元素的索引是
n - i - 1
因为 Java 中的数组索引是从零开始的:[0..n - 1]
make n
elements。
因此,更新后的函数可能会像这样(所有相关的变量声明都移动到for
循环内):
public static void reverseArray(int[] arr, int n) {
for (int i = 0, j = n - 1; i < n/2; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
此外,实现的方法允许反转输入数组的部分n
元素,因此最好有一个仅接受参数的重载版本,并使用andarr
的最小值来防止:n
arr.length
ArrayIndexOutOfBoundsException
public static void reverseArray(int[] arr) {
reverseArray(arr, arr.length);
}
public static void reverseArray(int[] arr, int n) {
for (int i = 0, m = Math.min(n, arr.length), j = m - 1; i < m/2; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
测试:
int[] arr = {1, 2, 3, 4, 5};
reverseArray(arr, 3);
System.out.println("After reverse: " + Arrays.toString(arr));
输出:
After reverse: [3, 2, 1, 4, 5]