三种方法(循环、Stream包、Collections包)解决“定义数组Array来存放考试成绩,输入学生人数n,再逐个输入学生单科成绩,最后输出最高分、最低分和平均分” 问题

(1)传统的循环方法比较简单,直接上代码(重点在后面代码部分细节):

 1 package funny_play;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Test_3_tradional {
 6     public static void main(String[] args) {
 7         System.out.println("请输入要录入的学生人数:");
 8         Scanner input = new Scanner(System.in);
 9         int n = input.nextInt();
10         int grade[] = new int[100];
11         int i = 0;
12         while(i<n) {
13             System.out.println("请输入第"+(i+1)+"个学生的成绩:");
14             Scanner score = new Scanner(System.in);
15             grade[i] = score.nextInt();
16             ++i;
17         }
18         int j = 0,sum = 0,max = grade[0],min = grade[0];
19         while(j<n) {
20             if(grade[j]>max) {
21                 max = grade[j];
22             }
23             if(grade[j]<min) {
24                 min = grade[j];
25             }
26             sum += grade[j];
27             j++;
28         } 
29         System.out.println("最高分:" + max);
30         System.out.println("最低分:" + min);
31         System.out.println("平均分:" + sum/n);
32     }
33 }
traditonal

(2)利用Stream流方式的max、min两个通用功能求最大最小值:

 1 package funny_play;
 2 
 3 import java.util.Scanner;
 4 import java.util.Arrays;
 5 
 6 public class Test_3_Stream {
 7     public static void main(String[] args) {
 8         System.out.println("请输入要录入的学生人数:");
 9         Scanner input = new Scanner(System.in);
10         int n = input.nextInt();
11         int grade[] = new int[n];
12         int i = 0;
13         while(i<n) {
14             System.out.println("请输入第"+(i+1)+"个学生的成绩:");
15             Scanner score = new Scanner(System.in);
16             grade[i] = score.nextInt();
17             ++i;
18         }
19         System.out.println("最高分:" + Arrays.stream(grade).max().getAsInt());
20         System.out.println("最低分:" + Arrays.stream(grade).min().getAsInt());
21         System.out.println("平均分:" + findSum(grade)/n);
22     }
23     
24     public static int findSum(int array[]) {
25         return Arrays.stream(array).sum();
26     }
27 }
Stream

Stream流不提供求总和sum的功能,所以我们另外导入Array包算总和sum:

1 public static int findSum(int array[]) {
2      return Arrays.stream(array).sum();
3 }

(3)利用Collections包的max、min方法求最大最小值:

 1 package funny_play;
 2 
 3 import java.util.Arrays;
 4 import java.util.Scanner;
 5 import java.util.Collections;
 6 
 7 public class Test_3_Collections {
 8     public static void main(String[] args) {
 9         System.out.println("请输入要录入的学生人数:");
10         Scanner input = new Scanner(System.in);
11         int n = input.nextInt();
12         Integer grade[] = new Integer[n];
13         int i = 0;
14         while(i<n) {
15             System.out.println("请输入第"+(i+1)+"个学生的成绩:");
16             Scanner score = new Scanner(System.in);
17             grade[i] = score.nextInt();
18             ++i;
19         }
20         System.out.println("最高分:" + (int)Collections.max(Arrays.asList(grade)));
21         System.out.println("最低分:" + (int)Collections.min(Arrays.asList(grade)));
22         System.out.println("平均分:" + findSum(grade)/n);
23     }
24     
25     public static int findSum(Integer[] array) {
26         return Arrays.stream(array).mapToInt(Integer::intValue).sum();
27     }
28 }
Collections

利用语句

1 (int)Collections.max(Arrays.asList(grade))

求最大值,最小值同理。

此处插入 Int 和 Integer 的区别:

1、Integer是int的包装类,int则是java的一种基本数据类型 
2、Integer变量必须实例化后才能使用,而int变量不需要 
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 
4、Integer的默认值是null,int的默认值是0

 Collections包的max、min方法调用需要将数组grade[]转化成对象数组,即 Int 转化成 Integer。

 故求总和sum时,sum()方法仅支持原始类型流,如果要想使用包装类型Integer流,我们必须使用mapToInt方法转换至IntStream,然后再调用sum()方法:

Arrays.stream(array).mapToInt(Integer::intValue).sum();

最后,三个方法的结果一致:

 

小小的问题总结:

年少不知愚昧还不晓得好好学习~~ 

原文地址:https://www.cnblogs.com/2640335699qqcom/p/15364620.html