题目概要
这次的目标略微简单些,是一道关于老师讲的题目。因为有了些其他的见解,做了些拓展。下面先亮一下题:
基于当前的学习情况来讲,我没有学过任何类似于__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("您的输入不符合条件,请重新输入!");                 }             }     } }
   | 
 
整个的思维其实很简单,一小时不到就敲出来了.关键是家里一直吵吵嚷嚷的,很影响学习的效率(那响度啊,受不鸟受不鸟…算是被逼过来写博客了…正好把思路梳理下.).