当前位置:首页 > IT技术 > 编程语言 > 正文

实现动态给数组添加元素效果,实现对数组扩容
2022-02-14 10:39:03

 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("
arr[" + round + "] = ");
28              arr[round] = scan.nextInt();
29              }
30              //选择是扩容还是缩减,还是退出
31              System.out.println("
请选择是数组扩容还是缩减,扩容输入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("=======数组扩容成功=======
扩容后数组元素依次为:");
54              for (int j = 0; j <= arr.length - 1; j++)
55                  System.out.print(arr[j] + " ");
56              //用户选择是否继续
57              System.out.println("
请选择是否继续添加,若是,点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("=====数组缩减成功=====
缩减后的数组元素依次为:");
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("
请选择是否继续缩减,若是,点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 }
该方法总要开辟一个新内存,效率很慢

 

本文摘自 :https://www.cnblogs.com/

开通会员,享受整站包年服务立即开通 >