数组添加/扩容
需求:实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java
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[] arr1 = new int[arr.length+1];
3. 遍历 arr 数组,依次将 arr 的元素拷贝到 arr1 数组
4. 将 4 赋给 arr1[arr.length] = 4;把 4 赋给 arr1 最后一个元素
5. 让 arr 指向 arr1 ; arr = arr1; 那么 原来 arr 数组就被销毁
6. 创建一个 Scanner 可以接受用户输入
7. 因为用户什么时候退出,不确定,使用 do-while + break 来控制
- 代码
package com.itheima.day2; import java.util.Scanner; //需求:给数组int[] arr = {1, 2, 3}添加一个元素4,得到int[] arr = {1, 2, 3,4}, // 用户是否继续添加,添加成功,是否继续?y/n public class test6 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); do { int[] arr = {1, 2, 3}; int[] arr1 = new int[arr.length + 1];//创建一个新数组 for (int i = 0; i < arr.length; i++) { arr1[i] = arr[i];//将arr数组拷贝给数组arr1 } System.out.println("请输入你要添加的元素:"); arr1[arr.length] = sc.nextInt();//给arr1数组添加元素值为4 arr = arr1;//将添加元素后的arr1数组拷贝回给arr数组 System.out.println("-----元素扩容后的情况------"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t");//对arr数组进行遍历输出 } System.out.println(); System.out.println("是否要继续添加?y/n"); char key = sc.next().charAt(0); if (key == 'n') { System.out.println("++++你退出了添加++++"); break; } } while (true); } }
执行结果:
数组缩减
需求:有一个数组 {1, 2, 3, 4, 5}, 可以将该数组进行缩减,提示用户是否继续缩减,每次缩减最后那个元素。当只剩下最后一个元素,提示,不能再缩减。
思路分析:数组添加(扩容)的逆向思维
- 代码
执行结果·:package com.itheima.day2; import java.util.Scanner; // 需求:有一个数组 {1, 2, 3, 4, 5}, 可以将该数组进行缩减,提示用户是否继续缩减, // 每次缩减最后那个元素。当只剩下最后一个元素,提示,不能再缩减。 public class test7 { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; Scanner sc = new Scanner(System.in); //扫描器(导包) do { // //定义一个数组长度为arr1.length-1的数组去接收缩减后剩下要存储的元素 int[] arr1 = new int[arr.length - 1]; //缩减 => 每次少遍历一个元素 for (int i = 0; i < arr.length - 1; i++) { arr1[i] = arr[i]; } arr = arr1;//将arr1重新赋回给arr System.out.println("-----元素缩减后的情况-----"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t");// 不换行输出并且之间有间隔 } System.out.println(); //换行 System.out.println("是否继续缩减?y/n"); System.out.println("————————————————————————————————————"); char key = sc.next().charAt(0); //接收 if (key == 'y') { //是否继续缩减 //如果继续缩减,判断数组长度是否等于1,是————>停止缩减,退出程序 if (arr.length < 2) { System.out.println("数组长度等于1,不能再缩减!"); break; } } else { System.out.println("不再继续缩减!"); break; } } while (true); } }