zoukankan      html  css  js  c++  java
  • 三种方法(循环、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();

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

     

    小小的问题总结:

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

  • 相关阅读:
    问题:Failed to execute goal org.apache.maven.plugins:mavencompilerplugin:3.5.1:compile (defaultcompile)
    STL容器的内存分配
    C++中的引用到底是什么
    解决eclipse无法解析shared_ptr
    Deleted pointer causes undefined behaviour
    诞生于饭桌上的jcSQL语言
    状压dp做题笔记
    TC做题笔记
    数据结构做题笔记
    POI做题笔记
  • 原文地址:https://www.cnblogs.com/2640335699qqcom/p/15364620.html
Copyright © 2011-2022 走看看