(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 }
(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流不提供求总和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 }
利用语句
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();
最后,三个方法的结果一致:
小小的问题总结:
年少不知愚昧还不晓得好好学习~~