1 /*要求:實(shí)現(xiàn)動(dòng)態(tài)給數(shù)組添加元素效果,實(shí)現(xiàn)對(duì)數(shù)組擴(kuò)容(縮減) 2 1.原始數(shù)組用int[] arr 3 2.增加(縮減)的新元素,放在原始數(shù)組當(dāng)前的最后(去除最后元素) 4 3.用戶可以選擇是否繼續(xù)添加或刪除,且在一次增加(縮減)完成后可以選擇下一次是縮減(增加)還是退出程序 5 6 思路 7 1.由于不能直接擴(kuò)容,所以選擇改變?cè)紨?shù)組指向的內(nèi)存空間 8 2.每次用戶選擇繼續(xù)添加時(shí),創(chuàng)建一個(gè)新數(shù)組,并把原先的數(shù)組, 9 按元素一個(gè)個(gè)賦值給新數(shù)組,int[] arrnew = new int[arr.length + 1] 10 3.第一次是肯定選擇添加的,所以do while + break,arrnew放在循環(huán)體中, 11 以便每次循環(huán)時(shí)都能重新利用arrnew,arr在主方法全局,在賦值完后,接受用戶輸入 12 4.用一個(gè)字節(jié)型變量當(dāng)標(biāo)志,如果在擴(kuò)容語句塊里退了出來,那么在選擇時(shí)就可以去除擴(kuò)容選項(xiàng)了 13 1為從增加語句塊退出,2就是從縮減語句塊退出 14 15 數(shù)組縮減和擴(kuò)容一樣的原理,不贅述 16 */ 17 import java.util.Scanner; 18 public class test{ 19 public static void main(String[] args) { 20 //讓用戶輸入要操作的數(shù)組,用length接受長(zhǎng)度,然后接受賦值 21 System.out.println("請(qǐng)輸入你想要的數(shù)組長(zhǎng)度"); 22 Scanner scan = new Scanner(System.in); 23 int length = scan.nextInt(); 24 int[] arr = new int[length]; 25 System.out.println("請(qǐng)依次為數(shù)組元素賦值(整數(shù))"); 26 for (int round = 0; round <= length - 1;round++){ 27 System.out.print(" arr[" + round + "] = "); 28 arr[round] = scan.nextInt(); 29 } 30 //選擇是擴(kuò)容還是縮減,還是退出 31 System.out.println(" 請(qǐng)選擇是數(shù)組擴(kuò)容還是縮減,擴(kuò)容輸入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("擴(kuò)容輸入1,退出按3"); 40 choice = scan.nextInt(); 41 } 42 if(choice == 1){ 43 do { 44 int[] arrnew = new int[arr.length + 1]; 45 //一個(gè)個(gè)賦值 46 for (int i = 0;i <= arr.length - 1;i++) 47 arrnew[i] = arr[i]; 48 //讓用戶輸入并接受 49 System.out.println("請(qǐng)輸入你想在數(shù)組新加入的數(shù)字"); 50 arrnew[arrnew.length - 1] = scan.nextInt(); 51 //把新數(shù)組賦值給原始數(shù)組,擴(kuò)容成功,并依次輸出擴(kuò)容后數(shù)組的元素 52 arr = arrnew; 53 System.out.println("=======數(shù)組擴(kuò)容成功======= 擴(kuò)容后數(shù)組元素依次為:"); 54 for (int j = 0; j <= arr.length - 1; j++) 55 System.out.print(arr[j] + " "); 56 //用戶選擇是否繼續(xù) 57 System.out.println(" 請(qǐng)選擇是否繼續(xù)添加,若是,點(diǎn)y,若不是,點(diǎn)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ù)組是否只剩下一個(gè)元素 67 if (arr.length > 1){ 68 //定義新數(shù)組,長(zhǎng)度為原始數(shù)組減一,然后除了最后一個(gè)元素,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ù)組就是縮減后的樣子,將原始數(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("對(duì)不起,數(shù)組只剩一個(gè)元素,無法再縮減"); 79 break; 80 } 81 //讓用戶選擇是否繼續(xù) 82 System.out.println(" 請(qǐng)選擇是否繼續(xù)縮減,若是,點(diǎn)y,若不是,點(diǎn)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("程序結(jié)束!"); 91 break; 92 } 93 } 94 } 95 }
該方法總要開辟一個(gè)新內(nèi)存,效率很慢
?
本文摘自 :https://www.cnblogs.com/