需求: 数组扩容,将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);
至此一个数组扩充的程序就完成了