数组的反序
A. 数组的反序输出(原数组值不变)
1.核心代码
反序输出(循环从最后一个数开始进行操作)
for (int i = numbers.length-1; i>=0;i--) {
System.out.print(numbers[i]+"\t");
}
2.常见问题点分析
2.1 反序输出时,如何保证输出的第一个数为数组中的最后一个,且输出顺序是按从尾部到头部顺序进行输出的
解决方案: 建立一个for循环,其中需要满足以下条件:
a.循环初始值i从数组长度-1开始(最后一个数),
b.循环判定条件为i>=0(第一个数)
c.循环次数为数组长度,
d.循环计数为i–
2.2 反序输出是否影响原数组的顺序???
解决方案:不影响,因为反序输出只是对数组进行输出操作,没有对其进行赋值、交换等影响原数组顺序的操作。
3.运行截图
4.源代码
public class Output_Array {
public static void main(String[] args) {
System.out.println("数组的反序输出结果为:");
int[] numbers={1,3,77,9,-66};
for (int i = numbers.length-1; i>=0;i--) {
System.out.print(numbers[i]+"\t");
}
System.out.println("\n原数组为:");
for (int temp01:numbers
) {
System.out.print(temp01+"\t");
}
}
}
B.反序数组(原数组的值进行首尾对调)
1.核心代码
反序操作
for (int i = 0; i <numbers.length/2; i++) {
int temp=numbers[i];
numbers[i]=numbers[numbers.length-1-i];
numbers[numbers.length-1-i]=temp;
}
2.常见问题点分析
2.1 反序的实质是数的对调,那么对调次数应为多少呢?
2.1.1 当反序数组为奇数时,对调过程如下图所示:
2.1.2 当反序数组为偶数时,对调过程如下图所示:
可以推导得出反序数组对调次数=数组长度/2(因为整型相除不会保留小数,所以这个也适用于数组长度为奇数的情况)
2.2 如何保证第一个和最后一个对调,第二个与倒数第二个对调???
解决方案:采用下标移动法,其思路如下所示
在循环过程中,交换的后面部分数字的下标为数组长度-1-循环变量i,
前面数字的下标为i
理由:每交换一次
对调的数字从头部来看是往后移动(+1)一个位置,
从尾部来看是往前面移动(-1)一个位置
这个数据变化与i的变化保证一致
3.运行截图
3.1 当原数组长度为奇数时,结果如下图所示:
3.2 当原数组长度为偶数时,结果如下图所示:
4.源代码
public class Demo1 {
public static void main(String[] args) {
System.out.println("执行反序操作前:");
// int[] numbers={1,44,56,78,99};
//这是数组长度为奇数的情况
int[] numbers={1,44,56,78,99,187};
//这是数组长度为偶数的情况
for (int temp01:numbers
) {
System.out.print(temp01+"\t");
}
System.out.println("\n执行反序操作后");
for (int i = 0; i <numbers.length/2; i++) {
int temp=numbers[i];
numbers[i]=numbers[numbers.length-1-i];
numbers[numbers.length-1-i]=temp;
}
for (int temp02:numbers
) {
System.out.print(temp02+"\t");
}
}
}