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