需求: 数组扩容,将int[] arr {1, 2, 3}扩充成{1, 2, 3, 4}
并提示输出成功,是否继续 y/n
思路分析:
1.化繁为简,将需求拆分成一个个小需求
1.1此时我们先完成扩容的功能
我们首先定义一个新的数组,长度为new arrNum[arr.length + 1]
然后将arr中的元素遍历道新数组中,再添加想要添加的元素
最后将新数组赋给arr arr = arrNum;(注意,数组的赋值给的是存在于栈中的地址,而不是具体的值,真正的值存在于堆的空间当中,是将arr也指向arrNum的堆空间,原本的arr所对应的空间将会被jvm当做垃圾清除)
int[] arr = {1, 2, 3};int[] arrNum = new int[arr.length + 1];for ( int i = 0; i < arr.length; i++) {arrNum[i] = arr[i];} arrNum[arrNum.length - 1] = add;arr = arrNum;System.out.println("====arr扩容后====");for ( int i = 0; i < arr.length; i++ ) {System.out.print(arr[i] + "t");}
1.2由死变活,将代码优化,更具交互性,
首先创建一个Scanner对象
并且再创建一个变量接收用户的输入
因为不确定用户需要添加的次数,此时可使用do-while + break的方法
最后询问是否需要继续添加
Scanner myScanner = new Scanner(System.in);int[] arr = {1, 2, 3};do{int[] arrNum = new int[arr.length + 1];//这一句必须包进来,否则arr的长度会一直是4,从而导致每输入一个,则被替换,而不是扩充了(本人亲身经历,说多了都是泪啊)for ( int i = 0; i < arr.length; i++) {arrNum[i] = arr[i];}System.out.println("请添加需要扩充的元素:");int add = myScanner.nextInt();arrNum[arrNum.length - 1] = add;arr = arrNum;System.out.println("====arr扩容后====");for ( int i = 0; i < arr.length; i++ ) {System.out.print(arr[i] + "t");}System.out.println("您是否需要继续添加 y/n");char chars = myScanner.next().charAt(0);if(chars == 'n') {break;}}while(true);
至此一个数组扩充的程序就完成了