题目概要
这次的目标略微简单些,是一道关于老师讲的题目。因为有了些其他的见解,做了些拓展。下面先亮一下题:
基于当前的学习情况来讲,我没有学过任何类似于__Python__那种能直接__add元素__的方法,那么我要怎么做才能扩容呢?
答案很简单,只需要再 __创一个数组__,然后 嫁接 过去就可以了。(类似于数组=新数组
,调用相同的内存地址,原先初始数组的赋值就被废弃了.)
但……这只是老师的想法啊……
我的思考
我的目标:实现数组的增删,且基于当下的条件,适时再引入一些其他的东西(毕竟学过其他语言,不能浪费了)。
整体思路如下:
0.创建一个初始数组
int arr_Initial = {1,3,4,6};
|
1.创建一个接收器,接收是要进行 增/删/阅读/退出 的哪一项:
import java.util.Scanner; Scanner myScanner = Scanner(System.in);
System.out.print("数组的原始数据为:"); for(int i=0;i<arr_Initial;i++){ System.out.print(arr_Initial[i]+" "); }
System.out.println("请问您要进行哪类操作?"); System.out.print("增/删/阅/退=>a/k/r/n :");
char chars = myScanner.next().charAt(0);
int num;
int num_l = arr_Initial.length;
|
2.使用条件判断进行状态区分,总计有5个分支语句,如下:
if(chars=='a') { ... } else if (chars=='k') { ... } else if (chars=='r') { System.out.println("当前数组的所有元素为:"); for(int i=0;i<num_l;i++){ System.out.print(arr_Initial+" "); } } else if (chars=='n') { System.out.print("退出当前循环!下列是当前数组的所有元素:"); for(int i=0;i<num_l;i++){ System.out.print(arr_Initial+" "); } break; } else { System.out.println("您的输入不符合条件,请重新输入!"); }
|
增模块与减模块较大,分别独立出来讲。
“增”模块
增模块的大体思路是:
1.获取要增加的数组有多少,赋值给 num.
System.out.print("请输入增加元素的个数:"); int num = myScanner.nextInt();
|
2.创建临时数组 __new_arr__,大小为初始数组大小+arr_Initial.length
int[] new_arr = new int[num+num_l];
|
3.按个读取初始数组的全部元素,按位赋值给临时数组。这样临时数组就具备了初始数组的所有元素,下一步可以 重塑 初始数组了。
for(int i=0;i<num_l;i++){ new_arr[i]=arr_Initial[i]; }
|
4.重塑初始数组的大小,只需要 new一下 就可以了,再使用for循环赋值回来就行了。这就是我理解的实质性的扩充数组的方式。
原本在这一步之前有一步arr_Initial=null
的步骤的,观察其对结果没什么影响,故省略不计。
arr_Initial = new int[new_arr.length]; for(int i=0;new_arr.length;i++){ arr_Initial[i]=new_arr[i]; }
new_arr = null;
|
5.接收新的数组元素,使用 __for循环接收__。
for(int i=0;i<num;i++) { System.out.print("请输入要添加的第"+(i+1)+"个元素:"); arr_Initial[num_l+i] = myScanner.nextInt(); }
|
简单完成了 __“增”模块__,接下来处理下 __“减”模块__。
“减”模块
这个模块更简单,和增模块一样,有一个类似的 __减容模块__,下面具体实际操作下。
1.获取 降容数
System.out.println("注意!删除的方式是直接从数组末尾减去对应个数的元素!"); System.out.print("请输入删除元素的个数:"); num = myScanner.nextInt();
|
2.转换降容数,并且创建为 __临时数组__。
num = arr_Initial.length-num; if(num<0) { System.out.println("降容过低!拒绝降容!") }
int[] del_arr = new int[num_l-num];
|
3.临时的数组复制初始数组的部分元素值,并且对初始数组降容。
for(int i=0;i<del_arr.length;i++) { del_arr[i] = arr_Initial[i]; } arr_Initial = new int[del_arr.length];
|
4.数组重塑降容后,将临时数组的值返还给初始数组,并且赋 null 准备回收。
for(int i=0;i<arr_Initial.length;i++){ arr_Initial[i]=del_arr[i]; } del_arr = null;
|
合并
接下来,只需要稍做处理,将所有的代码 合并 即可。下面是合并的所有代码。
import java.util.Scanner; public class word02 { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); int[] arr_Initial = { 1, 3, 4, 6 }; System.out.print("数组的原始数据为:"); for(int i = 0;i<arr_Initial.length;i++){ System.out.print(arr_Initial[i]+" "); } int num; while(true) { System.out.println("请问您要进行哪类操作?"); System.out.print("增/删/阅/退=>a/k/r/n :"); char chars_yn = myScanner.next().charAt(0); int num_l = arr_Initial.length; if (chars_yn=='a') { System.out.print("请输入增加元素的个数:"); num = myScanner.nextInt(); int[] new_arr = new int[num+num_l]; for(int i=0;i<num_l;i++){ new_arr[i]=arr_Initial[i]; } arr_Initial = new int[new_arr.length]; for(int i=0;i<new_arr.length;i++){ arr_Initial[i]=new_arr[i]; } new_arr = null; for(int i=0;i<num;i++) { System.out.print("请输入要添加的第"+(i+1)+"个元素:"); arr_Initial[num_l+i] = myScanner.nextInt(); } } else if(chars_yn=='k') { System.out.print("请输入需要减少的元素个数:"); num = myScanner.nextInt(); if(arr_Initial.length-num<0) { System.out.println("降容过低!拒绝降容!"); continue; } int[] del_arr = new int[num_l-num]; for(int i=0;i<del_arr.length;i++) { del_arr[i] = arr_Initial[i]; } arr_Initial = new int[del_arr.length]; for(int i=0;i<arr_Initial.length;i++){ arr_Initial[i]=del_arr[i]; } del_arr = null; } else if (chars_yn=='r') { System.out.println("当前数组的大小为:"); for(int i=0;i<arr_Initial.length;i++){ System.out.print(arr_Initial[i]+" "); } System.out.println(""); } else if (chars_yn=='n') { System.out.print("退出当前循环!下列是当前数组的所有元素:"); for(int i=0;i<arr_Initial.length;i++){ System.out.print(arr_Initial[i]+" "); } break; } else { System.out.println("您的输入不符合条件,请重新输入!"); } } } }
|
整个的思维其实很简单,一小时不到就敲出来了.关键是家里一直吵吵嚷嚷的,很影响学习的效率(那响度啊,受不鸟受不鸟…算是被逼过来写博客了…正好把思路梳理下.).