数组的反序

数组的反序

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");
        }
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值