今天在学习Java时,做了一个小测验:实现输出考试成绩的前三名,功能很简单,但是其中关于一些思维的锻炼还是很有趣的,自己写的代码和别人的代码一样,但是其效率很不一样。
题目要求:实现输出考试成绩的前三名
1、 考试成绩已保存在数组 scores 中,数组元素依次为 89 , -23 , 64 , 91 , 119 , 52 , 73
2、 要求通过自定义方法来实现成绩排名并输出操作,将成绩数组作为参数传入
3、 要求判断成绩的有效性( 0—100 ),如果成绩无效,则忽略此成绩
确实是很简单的题目,但是我写的方法在小数据量的时候看不出有多大的问题,但是当数据量提升上来的时候就可以发现一些问题了。废话不多说上代码。
//定义方法完成成绩排序并输出前三名的功能 public void returnArr(int[] scores){ for(int i=0;i<scores.length;i++){ if((scores[i]<0) || (scores[i]>100)){ scores[i]=0; } } Arrays.sort(scores); for(int j=(scores.length-1);j>(scores.length-4);j--){ System.out.println(scores[j]); } }
我的想法很简单,整个功能分为三步操作,首先清洗数据,然后排序,最后再输出想要的数据,看着没什么问题,然而在看下其他人写的代码。
//定义方法完成成绩排序并输出前三名的功能 public void big3(int [] scores) { Arrays.sort(scores); int num = 0; for(int i = scores.length-1;i>=0&&num<3;i--) { if(scores[i]<0||scores[i]>100) continue; num++; System.out.println(scores[i]); } }
这是另一个人写的代码,这个代码将功能分为两步来操作,首先排序,然后在清洗数据的同时输出想要的数据。
这个就比我的好很多,在数据量大的情况下,除去排序消耗资源差不多,我的需要遍历一次数组,而这个程序则完全不用,节省了很大的资源,看来自己的逻辑思维能力的确还需锻炼啊!文笔一般,也就写这样了,希望越来越好吧!