1 /*要求:实现动态给数组添加元素效果,实现对数组扩容(缩减)
2 1.原始数组用int[] arr
3 2.增加(缩减)的新元素,放在原始数组当前的最后(去除最后元素)
4 3.用户可以选择是否继续添加或删除,且在一次增加(缩减)完成后可以选择下一次是缩减(增加)还是退出程序
5
6 思路
7 1.由于不能直接扩容,所以选择改变原始数组指向的内存空间
8 2.每次用户选择继续添加时,创建一个新数组,并把原先的数组,
9 按元素一个个赋值给新数组,int[] arrnew = new int[arr.length + 1]
10 3.第一次是肯定选择添加的,所以do while + break,arrnew放在循环体中,
11 以便每次循环时都能重新利用arrnew,arr在主方法全局,在赋值完后,接受用户输入
12 4.用一个字节型变量当标志,如果在扩容语句块里退了出来,那么在选择时就可以去除扩容选项了
13 1为从增加语句块退出,2就是从缩减语句块退出
14
15 数组缩减和扩容一样的原理,不赘述
16 */
17 import java.util.Scanner;
18 public class test{
19 public static void main(String[] args) {
20 //让用户输入要操作的数组,用length接受长度,然后接受赋值
21 System.out.println("请输入你想要的数组长度");
22 Scanner scan = new Scanner(System.in);
23 int length = scan.nextInt();
24 int[] arr = new int[length];
25 System.out.println("请依次为数组元素赋值(整数)");
26 for (int round = 0; round <= length - 1;round++){
27 System.out.print("\narr[" + round + "] = ");
28 arr[round] = scan.nextInt();
29 }
30 //选择是扩容还是缩减,还是退出
31 System.out.println("\n请选择是数组扩容还是缩减,扩容输入1,缩减输入2,退出按3");
32 byte sign = 0;
33 int choice = scan.nextInt();
34 while(true){
35 if(sign == 1){
36 System.out.println("缩减输入2,退出按3");
37 choice = scan.nextInt();
38 }else if (sign == 2){
39 System.out.println("扩容输入1,退出按3");
40 choice = scan.nextInt();
41 }
42 if(choice == 1){
43 do {
44 int[] arrnew = new int[arr.length + 1];
45 //一个个赋值
46 for (int i = 0;i <= arr.length - 1;i++)
47 arrnew[i] = arr[i];
48 //让用户输入并接受
49 System.out.println("请输入你想在数组新加入的数字");
50 arrnew[arrnew.length - 1] = scan.nextInt();
51 //把新数组赋值给原始数组,扩容成功,并依次输出扩容后数组的元素
52 arr = arrnew;
53 System.out.println("=======数组扩容成功=======\n扩容后数组元素依次为:");
54 for (int j = 0; j <= arr.length - 1; j++)
55 System.out.print(arr[j] + " ");
56 //用户选择是否继续
57 System.out.println("\n请选择是否继续添加,若是,点y,若不是,点n");
58 char next1 = scan.next().charAt(0);
59 if (next1 != 'y') {
60 sign = 1;
61 break;
62 }
63 }while(true);
64 }else if(choice == 2){
65 do {
66 //检查原始数组是否只剩下一个元素
67 if (arr.length > 1){
68 //定义新数组,长度为原始数组减一,然后除了最后一个元素,arr其他元素全赋值给新数组
69 int arrnew[] = new int[arr.length - 1];
70 for (int i = 0;i <= arr.length - 2;i++)
71 arrnew[i] = arr[i];
72 //赋值完成,此时新数组就是缩减后的样子,将原始数组指向这里即可
73 arr = arrnew;
74 System.out.println("=====数组缩减成功=====\n缩减后的数组元素依次为:");
75 for (int j = 0;j <= arr.length - 1;j++)
76 System.out.print(arr[j] + " ");
77 }else{
78 System.out.print("对不起,数组只剩一个元素,无法再缩减");
79 break;
80 }
81 //让用户选择是否继续
82 System.out.println("\n请选择是否继续缩减,若是,点y,若不是,点n");
83 char next1 = scan.next().charAt(0);
84 if (next1 != 'y'){
85 sign = 2;
86 break;
87 }
88 } while(true);
89 }else if (choice == 3) {
90 System.out.println("程序结束!");
91 break;
92 }
93 }
94 }
95 }
该方法总要开辟一个新内存,效率很慢