题目:
1、假设1701班有40个学生,学号为170101~170140,全部参加语文、数学、英语三门考试,给出所有同学的各科成绩(成绩为整数、随机产生,范围为 [50,100]),并求出每位同学的总成绩。请编写程序将1701班各位同学的总成绩从高到低排序,并使用IO流的知识的把成绩写入到D:\StudentScore.txt文件中。
注:成绩相同时学号较小的先打印;要求:
① 打印的信息包含学号、姓名(姓名统一为“同学 X”[X=01,02,03,…]和学号后两位一致)和成绩,具体格式参考下面截图。
② 遍历数组时使用迭代器
效果图
这个时候运行用的代码
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 ;
}
}
}