【Java】【集合】【求学生成绩最小和最大值】2016.03.02

第一种方法:不考虑有两个最小成绩和最小成绩
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 = new ArrayList<>();

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);

}


}

 【Java】【集合】【求学生成绩最小和最大值】2016.03.02_第1张图片

第二种方法: 考虑有两个最小成绩和最小成绩

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=new 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>iterator= hashMap.entrySet().iterator();

while (iterator.hasNext()) {

Map.Entry entry = (Map.Entry) iterator

.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()方法

Collectioncollection=hashMap.values();//将map中的double类型的value映射为集合

double studentMin=Collections.min(collection);//定义一个double类型的studentMin,获取value集合中最小的成绩

double studentMax=Collections.max(collection);//定义一个double类型的studentMin,获取value集合中最大的成绩

System.out.println();

//循环遍历,输出最低成绩和对应的学生信息

System.out.println("----------------【成绩最低学生】----------------");

Iterator>itMin= hashMap.entrySet().iterator();

while (itMin.hasNext()) {

Map.Entry entry = (Map.Entry) itMin.next();

Student2 key=entry.getKey();

Double value=entry.getValue();

if (value==studentMin) {

System.out.println(key+"【成绩】"+value);

}

}

System.out.println();

//循环遍历,输出最高成绩和对应的学生信息

System.out.println("----------------【成绩最高学生】----------------");

Iterator>itMax= hashMap.entrySet().iterator();

while (itMax.hasNext()) {

Map.Entry entry = (Map.Entry) itMax.next();

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;

}

}


【Java】【集合】【求学生成绩最小和最大值】2016.03.02_第2张图片


转载于:https://my.oschina.net/YongfengHe/blog/626914

你可能感兴趣的:(【Java】【集合】【求学生成绩最小和最大值】2016.03.02)