不确定长度数组的插入元素操作
js中很好压入,push即可。
本文谈论的是java中对于不确定长度的数组的压入元素操作。
题目是这样的:
定义一个数组,40元素,随机生成0~100整数,求平均值后将低于平均值的元素存储到一维数组打印并输出。
起初看到题目,也不是很难,循环遍历,求平均也简单,但是,一个不固定长度的数组,该怎么创建出来?当然事先循环出来低于平均值的个数也是可以的,但是不够简单,如何在能即时对数组进行压入元素操作呢?有人想到了 ArrayList ,没错,是可以,已经封装好的 add 方法,很方便。但是我们不用~
import java.util.Arrays; public class LogScoreLowerThanAverage { private int[] allArr; private int[] displayArr; private int len; private int ave; private int sumNum; public void create (int num) { len = num; allArr = new int[len]; for(int i = 0; i < len; i ++) { allArr[i] = (int)(Math.random()*100); } } public void getAve () { sumNum = 0; for(int i = 0; i < allArr.length; i ++) { sumNum += allArr[i]; } ave = sumNum / len; System.out.println("average score is : " + ave); } public void getLowThanAve () { displayArr = new int[0]; for(int i = 0; i < allArr.length; i ++) { if(ave > allArr[i]) { displayArr = insertElement(displayArr, allArr[i]); } } } public int[] insertElement (int[] arr1, int ele) { int[] source = new int[arr1.length + 1]; if(arr1.length == 0){ source[source.length - 1] = ele; } else { System.arraycopy(arr1, 0, source, 0, arr1.length); source[source.length - 1] = ele; } return source; } public void logDisplay () { System.out.println("all array : " + Arrays.toString(allArr)); System.out.println("lower than average : " + Arrays.toString(displayArr)); } public static void main (String[] args) { LogScoreLowerThanAverage l = new LogScoreLowerThanAverage(); l.create(40); l.getAve(); l.getLowThanAve(); l.logDisplay(); } }
阅读完后相信大家都发现了关键的一点:insertElement 方法,这里我们传入了保存低于平均值的数组以及此次循环低于平均值要压入数组的元素值,通过创建一个比当前传入数组长度 +1 的新数组,然后复制源数组元素到新数组中,最后将要插入元素存储到末位并返回此新数组,功能实现~