當前位置:首頁 > IT技術 > 編程語言 > 正文

實現(xiàn)動態(tài)給數(shù)組添加元素效果,實現(xiàn)對數(shù)組擴容
2022-02-14 10:39:03

 1 /*要求:實現(xiàn)動態(tài)給數(shù)組添加元素效果,實現(xiàn)對數(shù)組擴容(縮減)
 2 1.原始數(shù)組用int[] arr 
 3 2.增加(縮減)的新元素,放在原始數(shù)組當前的最后(去除最后元素)
 4 3.用戶可以選擇是否繼續(xù)添加或刪除,且在一次增加(縮減)完成后可以選擇下一次是縮減(增加)還是退出程序
 5 
 6 思路
 7 1.由于不能直接擴容,所以選擇改變原始數(shù)組指向的內存空間
 8 2.每次用戶選擇繼續(xù)添加時,創(chuàng)建一個新數(shù)組,并把原先的數(shù)組,
 9   按元素一個個賦值給新數(shù)組,int[] arrnew = new int[arr.length + 1]
10 3.第一次是肯定選擇添加的,所以do while + break,arrnew放在循環(huán)體中,
11   以便每次循環(huán)時都能重新利用arrnew,arr在主方法全局,在賦值完后,接受用戶輸入
12 4.用一個字節(jié)型變量當標志,如果在擴容語句塊里退了出來,那么在選擇時就可以去除擴容選項了
13   1為從增加語句塊退出,2就是從縮減語句塊退出
14 
15 數(shù)組縮減和擴容一樣的原理,不贅述
16 */
17 import java.util.Scanner;
18 public class test{
19      public static void main(String[] args) {
20      //讓用戶輸入要操作的數(shù)組,用length接受長度,然后接受賦值
21          System.out.println("請輸入你想要的數(shù)組長度");
22          Scanner scan = new Scanner(System.in);
23          int length = scan.nextInt();
24          int[] arr = new int[length]; 
25          System.out.println("請依次為數(shù)組元素賦值(整數(shù))");
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("
請選擇是數(shù)組擴容還是縮減,擴容輸入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("請輸入你想在數(shù)組新加入的數(shù)字");
50              arrnew[arrnew.length - 1] = scan.nextInt();
51              //把新數(shù)組賦值給原始數(shù)組,擴容成功,并依次輸出擴容后數(shù)組的元素
52              arr = arrnew;
53              System.out.println("=======數(shù)組擴容成功=======
擴容后數(shù)組元素依次為:");
54              for (int j = 0; j <= arr.length - 1; j++)
55                  System.out.print(arr[j] + " ");
56              //用戶選擇是否繼續(xù)
57              System.out.println("
請選擇是否繼續(xù)添加,若是,點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         //檢查原始數(shù)組是否只剩下一個元素
67             if (arr.length > 1){
68         //定義新數(shù)組,長度為原始數(shù)組減一,然后除了最后一個元素,arr其他元素全賦值給新數(shù)組
69             int arrnew[] = new int[arr.length - 1];
70             for (int i = 0;i <= arr.length - 2;i++)
71                 arrnew[i] = arr[i];
72             //賦值完成,此時新數(shù)組就是縮減后的樣子,將原始數(shù)組指向這里即可
73             arr = arrnew;
74             System.out.println("=====數(shù)組縮減成功=====
縮減后的數(shù)組元素依次為:");
75             for (int j = 0;j <= arr.length - 1;j++)
76                 System.out.print(arr[j] + " ");
77             }else{
78                 System.out.print("對不起,數(shù)組只剩一個元素,無法再縮減");
79                 break;
80             }
81             //讓用戶選擇是否繼續(xù)
82             System.out.println("
請選擇是否繼續(xù)縮減,若是,點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/

開通會員,享受整站包年服務立即開通 >