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/