第一种方法:不考虑有两个最小成绩和最小成绩
package com.geminno.homework0301;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class StudentMessageDemo {
/**
* 定义一个表示学生信息的类Student,要求如下:
*
* (1)类Student的成员变量:
*
* sNO示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩。
*
* (2)类Student带参数的构造方法:
*
* 在构造方法中通过形参完成对成员变量的赋值操作。
*
* (3)类Student的方法成员:
*
* getNo():获得学号;
*
* getName():获得姓名;
*
* getSex():获得性别;
*
* getAge()获得年龄;
*
* getJava():获得Java 课程成绩
*
* 根据类Student的定义,创建五个该类的对象,输出每个学生的信息,
* 计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List
list.add(new Student(1, "张三", "男", 21, 78));
list.add(new Student(2, "李四", "男", 20, 99));
list.add(new Student(3, "王五", "女", 23, 70));
list.add(new Student(4, "赵六", "女", 24, 100));
list.add(new Student(5, "刘七", "男", 18, 81));
System.out.println("------------【学生信息如下】------------");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
double[] sumJava=new double[list.size()];
double sum=0;
for (int i = 0; i < list.size(); i++) {
sumJava[i]=list.get(i).getsJava();
sum=sum+sumJava[i];
}
System.out.println("-----------【学生的平均成绩为】----------");
System.out.println(sum/(list.size()));
Collections.sort(list, new Student());
Student studentMin = Collections.min(list, new Student());
System.out.println("-----------【成绩最低的学生信息如下】------");
System.out.println(studentMin);
//
Student studentMax = Collections.max(list, new Student());
System.out.println("-----------【成绩最高的学生信息如下】------");
System.out.println(studentMax);
}
}
class Student implements Comparator
private int sNo;
private String sName;
private String sSex;
private int sAge;
private double sJava;
public Student() {
// TODO Auto-generated constructor stub
}
public Student(int sNo, String sName, String sSex, int sAge, double sJava) {
super();
this.sNo = sNo;
this.sName = sName;
this.sSex = sSex;
this.sAge = sAge;
this.sJava = sJava;
}
public int getsNo() {
return sNo;
}
public void setsNo(int sNo) {
this.sNo = sNo;
}
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public String getsSex() {
return sSex;
}
public void setsSex(String sSex) {
this.sSex = sSex;
}
public int getsAge() {
return sAge;
}
public void setsAge(int sAge) {
this.sAge = sAge;
}
public double getsJava() {
return sJava;
}
public void setsJava(double sJava) {
this.sJava = sJava;
}
@Override
public String toString() {
return "【学号】" + sNo + "【姓名】" + sName + "【性别】" + sSex
+ "年龄" + sAge + "【成绩】" + sJava;
}
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return Double.compare(o1.sJava, o2.sJava);
}
第二种方法: 考虑有两个最小成绩和最小成绩
package com.geminno.homework0301;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class StudentMessageDemo2 {
/**
* 定义一个表示学生信息的类Student,要求如下:
*
* (1)类Student的成员变量:
*
* sNO示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩。
*
* (2)类Student带参数的构造方法:
*
* 在构造方法中通过形参完成对成员变量的赋值操作。
*
* (3)类Student的方法成员:
*
* getNo():获得学号;
*
* getName():获得姓名;
*
* getSex():获得性别;
*
* getAge()获得年龄;
*
* getJava():获得Java 课程成绩
*
* 根据类Student的定义,创建五个该类的对象,输出每个学生的信息,
* 计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。
*
*
* (注意:有两种可能出现的情况,1.学生成绩都相同,那么最大成绩和最小成绩都一样 2.最小成绩和最大成绩的学生不止一个,有可能有一个以上成绩相同且最小的学生,最大成绩也是一样)
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap
hashMap.put(new Student2(1, "张三", "男", 21), 80D);
hashMap.put(new Student2(2, "李四", "男", 20), 99D);
hashMap.put(new Student2(3, "王五", "女", 23),70d);
hashMap.put(new Student2(4, "张三", "男",25), 80D);
hashMap.put(new Student2(5, "张三", "男", 26), 99D);
double sum=0;//定义一个double类型的变量,用来存放学生成绩的总和
System.out.println("---------------【学生信息如下】----------------");
Iterator
while (iterator.hasNext()) {
Map.Entry
.next();
System.out.println(entry.getKey()+"【成绩】"+entry.getValue());
sum=sum+entry.getValue();//循环来求出sum,另一种写法:sum+=entry.getValue();
}
//输出成绩总和以及平均值
System.out.println("----------------【我是分割线】----------------");
System.out.println("成绩总和:"+sum);
System.out.println("学生的平均成绩为:"+sum/hashMap.entrySet().size());//除数一般不用数字表示,由于map中不存在size()方法,所以调用Set中的size()方法
Collection
double studentMin=Collections.min(collection);//定义一个double类型的studentMin,获取value集合中最小的成绩
double studentMax=Collections.max(collection);//定义一个double类型的studentMin,获取value集合中最大的成绩
System.out.println();
//循环遍历,输出最低成绩和对应的学生信息
System.out.println("----------------【成绩最低学生】----------------");
Iterator
while (itMin.hasNext()) {
Map.Entry
Student2 key=entry.getKey();
Double value=entry.getValue();
if (value==studentMin) {
System.out.println(key+"【成绩】"+value);
}
}
System.out.println();
//循环遍历,输出最高成绩和对应的学生信息
System.out.println("----------------【成绩最高学生】----------------");
Iterator
while (itMax.hasNext()) {
Map.Entry
Student2 key=entry.getKey();
Double value=entry.getValue();
if (value==studentMax) {
System.out.println(key+"【成绩】"+value);
}
}
}
}
class Student2 {
private int sNo;
private String sName;
private String sSex;
private int sAge;
@Override
public String toString() {
return "【学号】" + sNo + "【姓名】" + sName + "【性别】" + sSex
+ "【年龄】" + sAge;
}
public int getsNo() {
return sNo;
}
public void setsNo(int sNo) {
this.sNo = sNo;
}
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public String getsSex() {
return sSex;
}
public void setsSex(String sSex) {
this.sSex = sSex;
}
public int getsAge() {
return sAge;
}
public void setsAge(int sAge) {
this.sAge = sAge;
}
public Student2(int sNo, String sName, String sSex, int sAge) {
super();
this.sNo = sNo;
this.sName = sName;
this.sSex = sSex;
this.sAge = sAge;
}
}