天天看点

集合练习题1

题目:

1、假设1701班有40个学生,学号为170101~170140,全部参加语文、数学、英语三门考试,给出所有同学的各科成绩(成绩为整数、随机产生,范围为 [50,100]),并求出每位同学的总成绩。请编写程序将1701班各位同学的总成绩从高到低排序,并使用IO流的知识的把成绩写入到D:\StudentScore.txt文件中。

注:成绩相同时学号较小的先打印;要求:

① 打印的信息包含学号、姓名(姓名统一为“同学 X”[X=01,02,03,…]和学号后两位一致)和成绩,具体格式参考下面截图。

② 遍历数组时使用迭代器

效果图

集合练习题1

这个时候运行用的代码

package com.demo;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Random;

public class Demo1 {
	public static void main(String[] args) {
        	//定义一个集合
		 ArrayList<StudentPersonDemo> al = new ArrayList<StudentPersonDemo>();
		
		for ( int i = 0+1; i <40+1; i++) {
			//实例Random类,使用它的随机方法
			Random rea = new Random();
			//在外部声明变量, 方便,if与else同时调用变量。
			int zong =0 ;
			int en;
			int ma;
			int le;
			int stn;
			String sn;
			//因为i小于10的时候是一位数的,所以当小于10的时候添加一个0。
			if(i<10){//rea.nextInt(51)+50意思是调用了Random的方法nexInt,51就是有51位数,加50就是为了在原基础上加上50,这样就不会出现1到50的数了
				 en =rea.nextInt(51)+50;//英语
				 ma =rea.nextInt(51)+50;//数学
				 le =rea.nextInt(51)+50;//语文
				 stn=170100+i;//学号
				 sn ="同学:"+0+i;//名字
				zong =en+ma+le;//总成绩
			}else{
				 en =rea.nextInt(51)+50;//英语
				 ma =rea.nextInt(51)+50;//数学
				 le =rea.nextInt(51)+50;//语文
				
				 stn=170100+i;//学号
				 sn = "同学:"+i;//名字
				 zong =en+ma+le;//总成绩
			}
			StudentPersonDemo spd =new StudentPersonDemo(stn,sn,le,ma,en,zong);
			al.add(spd);
			//可以在这里输出一下结果,
			/*System.out.println(spd.getStudentNumber()+"  "+spd.getName()+"  语文"+spd.getLanguage()+"   数学"+spd.getMath()+"  英语"+spd.getEnglish()+"  总成绩:"+spd.getTotalPoints());*/	
		}
		//排序一下al集合。
		Collections.sort(al);
		try {
			//创建BufferedWriter对象
			BufferedWriter buf =new BufferedWriter(new FileWriter("D://StudentScore.txt"));
			//可以直接使用循环写出,也可以使用迭代
			Iterator<StudentPersonDemo> it= al.iterator();
			while (it.hasNext()){
				StudentPersonDemo s =  it.next();
				String str ="学号:"+s.getStudentNumber()+"  "+s.getName()+"  语文"+s.getLanguage()+"   数学"+s.getMath()+"  英语"+s.getEnglish()+"  总成绩:"+s.getTotalPoints();
				buf.write(str+"\r\n");
				/*buf.newLine();*/
				
			}
			buf.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	 }
}
           

这个是调用的代码块

package com.demo;

public class StudentPersonDemo implements Comparable<StudentPersonDemo>{
	 //静态变量
	private int StudentNumber;//学号
	private String Name;//名字
	private int language;//语文
	private int math;//数学
	private int English;//英语
	private int TotalPoints;//总成绩
//无参构造器
	public StudentPersonDemo(){}
	//有参构造器
	public StudentPersonDemo(int studentNumber, String name, int language,
			int math, int english, int totalPoints) {
		super();
		StudentNumber = studentNumber;
		Name = name;
		this.language = language;
		this.math = math;
		English = english;
		TotalPoints = totalPoints;
	}
	public int getStudentNumber() {
		return StudentNumber;
	}
	
	public void setStudentNumber(int studentNumber) {
		StudentNumber = studentNumber;
	}
	
	public String getName() {
		return Name;
	}
	public void setName(String name) {
		Name = name;
	}
	public int getLanguage() {
		return language;
	}
	public void setLanguage(int language) {
		this.language = language;
	}
	public int getMath() {
		return math;
	}
	public void setMath(int math) {
		this.math = math;
	}
	public int getEnglish() {
		return English;
	}
	public void setEnglish(int english) {
		English = english;
	}
	public int getTotalPoints() {
		return TotalPoints;
	}

	public void setTotalPoints(int totalPoints) {
		TotalPoints = totalPoints;
	}

//重写排序方法
	@Override
	public int compareTo(StudentPersonDemo o) {
	//要是判断一项的话,就不用判断了。当判断一项无法,按照你的思想排序,就可以多判断一下
	// 从小到大 :this‐o      
	// 从大到小:o‐this        
	 // return this.age ‐ o.age;
		if (this.TotalPoints!=o.TotalPoints) {
			return o.TotalPoints- this.TotalPoints ;
		}else{
			return  this.StudentNumber-o.StudentNumber ;
		}
		
	}
	
}