数组反转、数组扩容、数组缩减

数组反转
public class ArrayReverse {
    //    编写一个main方法
    public static void main(String[] args) {
        /*
        要求:把数组的元素内容反转
        arr {11,22,33,44,55,66} --》 {66,55,44,33,22,11}

        思路分析
        1.方式一: 通过找规律反转
        规律
        ① 把 arr[0] 和 arr[5] 进行交换 {66,22,33,44,55,11}
        ② 把 arr[1] 和 arr[4] 进行交换 {66,55,33,44,22,11}
        ③ 把 arr[2] 和 arr[3] 进行交换 {66,55,44,33,22,11}
        ④ 一共要交换 3 次 = arr.length / 2
        ⑤ 每次交换时,对应的下标 是 arr[i] 和 arr[arr.length - 1 - i]

        2.方式二: 使用逆序赋值方式
        ① 先创建一个新的数组 arr2[] , 大小 arr.length
        ② 逆序遍历 arr ,将每个 元素拷贝到 arr2 的元素中(顺序拷贝)
        ③ 建议增加一个循环变量 j -> 0 -> 5
         */
//      方法一:
        int[] arr = {11,22,33,44,55,66};
        int temp = 0;
        int len = arr.length;//计算数组的长度
        for (int i = 0; i < len / 2; i++){
            temp = arr[len - 1 - i];//保存最后一位数
            arr[len - 1 -i] = arr[i];//将第一位交换到最后一位
            arr[i] = temp;//将保存的最后一位交换到第一位
        }
        System.out.println("=========交换后");
        for (int i = 0; i < len; i++){
            System.out.print(arr[i] + "\t");//66,55,44,33,22,11
        }

        System.out.println();
        System.out.println("逆序输出==========");
//      方法二:
        int[] arr2 = new int[arr.length];//遍历数组arr
        for (int i = len - 1,j = 0; i >= 0; i--,j++){
            arr2[j] = arr[i];
        }
//      ④ 当for循环结束,arr2就是一个逆序的数组 {66,55,44,33,22,11}
//      ⑤ 让 arr 指向 arr2数据空间,此时 arr原来的数据空间就没有变量引用,会被当作做垃圾 销毁
        arr = arr2;
//      ⑥输出 arr 看看
        for (int j = 0; j < arr.length; j++){
            System.out.print(arr[j]+" ");
        }
    }
}
数组扩容
import java.util.Scanner;

public class ArrayAdd {
    //    编写一个main方法
    public static void main(String[] args) {
        /*
        要求:实现动态的给数组添加元素效果,实现对数组扩容
        1. 原始数组使用静态分配 int[] arr = {1,2,3}
        2. 增加的元素4,直接放在数组的最后 arr = {1,2,3,4}

        3. 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续? y/n

        思路分析
        1. 定义初始数组 int[] arr = {1,2,3} //下标0 - 2
        2. 定义一个新的数组 int[] arrNew = new int[arr.length+1]'
        3. 遍历 arr 数组,依次将arr的元素拷贝到 arrNew数组
        4. 将 4 赋给 arrNew[arrNew.length - 1] = 4;把4赋给arrNew最后一个元素
        5. 让 arr 指向 arrNew ;     arr = arrNew; 那么 原来arr数组就被销毁
        6. 创建一个 Scanner 可以接收用户输入
        7. 因为用户什么时候退出,不确定,所以使用 do-while + break 来控制
         */

        Scanner scanner = new Scanner(System.in);

        int[] arr = {1, 2, 3};
        do {
            int[] arrNew = new int[arr.length + 1];
//      遍历 arr 数组,依次将arr的元素拷贝到 arrNew数组
            for (int i = 0; i < arr.length; i++) {
                arrNew[i] = arr[i];
            }
            System.out.println("请输入你需要添加的元素:");
            int addNum = scanner.nextInt();
//      把 addNum 赋给 arrNew 最后一个元素
            arrNew[arrNew.length - 1] = addNum;
//      把4赋给arrNew最后一个元素
//      arrNew[arrNew.length - 1] = 4;
//      让 arr 指向 arrNew
            arr = arrNew;
//      输出 arr
            System.out.println("===扩容后元素情况===");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + " ");
            }
            //问用户是否继续
            System.out.println("是否继续添加 y/n");
            char key = scanner.next().charAt(0);
            if (key == 'n'){
                break;
            }else {
                System.out.print("继续添加,");
            }
        }while (true);
        System.out.println("你退出了程序");
    }
}

不是完整的项目,可优化
数组缩减
import java.util.Scanner;

public class Arrayreduce {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        Scanner scanner = new Scanner(System.in);
        do {
            int[] arrNew = new int[arr.length - 1];
            for (int i = 0; i < arrNew.length; i++) {
                arrNew[i] = arr[i];
            }
            arr = arrNew;
            System.out.print("已删除最后一项后为:");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + " ");
            }

            if (arr.length < 2) {
                System.out.println("不能删除了");
                break;
            }

            System.out.println("你是否继续删减数组 y/n");
            char key = scanner.next().charAt(0);
            if (key == 'n') {
                break;
            }
        } while (true);
        System.out.println("退出程序");
    }
}

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值