想要实现一个这样的效果:
我们可以有以下三种方式:
public class ArrayExer05 {
public static void main(String[] args) {
//创建数组
int[] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
//反转数组
//方式1:
for (int i = 0; i < arr.length / 2; i++) {
//交换arr[i]和arr[arr.length - 1 - i]的元素
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
//方式2:
for(int i = 0,j = arr.length - 1;i < j;i++,j--){
//交换arr[i]和arr[j]的元素
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//方式3:不推荐
// int[] newArr = new int[arr.length];
// for (int i = arr.length -1;i >= 0;i--){
// newArr[i] = arr[i];
// }
System.out.println();
//打印数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
其中方式1:
for (int i = 0; i < arr.length / 2; i++) {
//交换arr[i]和arr[arr.length - 1 - i]的元素
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
- 结构简单:只使用一个循环变量
i
,逻辑较直观,便于初学者理解。- 清晰明确:
arr.length / 2
明确表示只需遍历数组的一半。
- 在计算对称位置时,使用
arr.length - 1 - i
,需要每次计算,虽然对性能影响微乎其微,但增加了些许计算量。
方式2:
for(int i = 0,j = arr.length - 1;i < j;i++,j--){
//交换arr[i]和arr[j]的元素
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
- 效率稍高:通过双指针
i
和j
,避免了每次计算对称位置arr.length - 1 - i
。- 逻辑直观:两个指针分别从头和尾向中间靠近,便于理解和扩展到其他需要双指针的场景(如字符串反转、查找等)。
方式3:
new了一个新的数组,开辟了新的空间,不推荐!