标签:要求 属性 string tables stream 生成 jta taf 推荐
上机目标
- 使用OO的思想封装代码
- 使用比较器(内部和外部比较器)完成OO的比较排序
- 学会使用Lambda表达式
- Java API的随机数生成、集合类的使用
- Java String的应用初探
分别实现
- 基于成绩(数值类型)的比较及统计:
- (1) 请按照成绩进行排序(升序或者降序),排序之后,按照分数段显示学生的姓名、学号、学院、如下分数段人数汇总,并输出相关信息(输出格式自己定义)不及格:=85分
- (2) 请随机抽查10份不同的成绩样本数据,进行及格率、良好率、优秀率的统计输出显示(输出格式自己定义,用%)
- (3)使用Collections.stream()完成统计:随机抽查10份不同学生的成绩,请统计所有机电学院的学生的人数和分段信息,并输出显示。
- 基于姓名(字符串类型)的比较及处理:请自定义内部或者外部比较器,完成按照姓名排序(升序或者降序)并
- (1) 输出前十名学生的信息。
- (2) 请统计出所有机电学院学生的信息、人数,输出格式不限
实现提醒
- 分段显示
- 可以使用if-else语句
- 或者switch-case
- 或者JDK8的java.util.stream的新功能,例如 ArrayList.stream().
- 建议优先使用Lambda表达式
- 基于Java java.util.Random伪随机数的使用技巧
- 涉及到种子,bound的使用
- 需要理解加上种子数,随机数会多次运行一样
- 需要不同——推荐
hashset
自动去重
- java.util.ArrayList类的使用
- 它用来放的是若干对象(其实就是对象的引用)
- 此处需要理解:为什么代码里能向ArrayList.add(1)的深层含义
- 为了放对象一致,使用了泛型,对这个数组列表进行类型化参数使用
- 若干Student对象放到ArrayList集合中,可以使用现成的API进行排序
- Collections.sort();这个排序,有两个重载的sort:
- (1)Collections.sort(arlist)
- 这样的要求arlist的对象是可比较的,于是我们对Student类定义的时候,让他变成可比较的
- public class Student implements Comparable+ CompareTo方法定义比较的属性。
- (2)Collections.sort(arlist,new Comparator(){ })
- 这(1)和(2)可以选择其一。他们之间的区别,使用(2)比较灵活 ,如果按照多个关键词排序的时候,可以随时写多个sort,然后new若干个Comparator这样的匿名内部类,对不同的属性(例如学号或者姓名或者成绩)进行比较定义
参考帮助
- java.util.stream:
- https://www.cnblogs.com/kaisadadi/p/9099485.html
- https://www.cnblogs.com/mrhgw/p/9171883.html
- 集合类:https://blog.csdn.net/qq_42142477/article/details/87891155#5.1
- 排序类:https://www.cnblogs.com/onepixel/articles/7674659.html
可选作业
- 可以尝试使用eharts或者tablesaw等Java的可视化工具完成数据统计和显示,参考链接:
- https://github.com/jtablesaw/tablesaw
- https://github.com/apache/incubator-echarts
- https://blog.csdn.net/sheep8521/article/details/89148054
我的代码
实验一
Student.java
package ex0101;
//inner implementation
public class Student implements Comparable {
//variables
private String id;
private String name;
private String gender;
private String dept;
private int score;
//constructors
public Student() {}
public Student(String id,String name,String gender,String dept,int score) {
this.id=id;
this.name=name;
this.gender=gender;
this.dept=dept;
this.score=score;
}
//methods-getter setter
public String getId() {
return id;
}
public void setId(String id) {
this.id=id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender=gender;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept=dept;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score=score;
}
//methods-show info
public void showInfo() {
System.out.print("id:"+id+"\t");
System.out.print("name:"+name+"\t");
// System.out.print("gender:"+gender+"\t");
System.out.print("dept:"+dept+"\t");
// System.out.print("score:"+score+"\t");
System.out.println();
}
//methods-cmp
@Override
public int compareTo(Student o) {
return this.score-o.score;
}
}
StudentUtil.java
package ex0101;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Random;
import java.util.Scanner;
public class StudentUtil {
public void getDataFromFile() throws FileNotFoundException {
//variables
//methods-input data
File f=new File("D:\\mesrc\\java_vscode\\file\\javascore.txt");
Scanner scanner=new Scanner(f);
ArrayList ar=new ArrayList();
while(scanner.hasNext()) {
Student Student=new Student(scanner.next(),scanner.next(),scanner.next(),scanner.next(),scanner.nextInt());
ar.add(Student);
}
scanner.close();
//sort data
sortInteger(ar);
//output data
printInfo(ar);
analyseRandom(ar);
}
public void sortInteger(ArrayList ar){
//inner sorting
Collections.sort(ar);
}
public void printInfo(ArrayList ar){
//1
//按照成绩进行排序
//按照分数段显示学生的姓名、学号、学院、如下分数段人数汇总
//并输出相关信息
System.out.println(" 不同分数段的学生信息:");
//fliter
System.out.println("-->优秀:");
ar.stream()
.filter((Student s)->s.getScore()>=85)
.forEach(u->u.showInfo());
System.out.println("-->良好:");
ar.stream()
.filter((Student s)->s.getScore()>=80&&s.getScore()u.showInfo());
System.out.println("-->及格:");
ar.stream()
.filter((Student s)->s.getScore()>=70&&s.getScore()u.showInfo());
System.out.println("-->不及格:");
ar.stream()
.filter((Student s)->s.getScore()u.showInfo());
System.out.println();
}
public void analyseRandom(ArrayList ar){
// get random num with HashSet
Random r=new Random();
HashSet hs=new HashSet();
while(hs.size()=85) a_num++;
else if(thisScore>=80) b_num++;
else if(thisScore>=70) c_num++;
if(ar.get(i).getDept().equals("机电学院")){
cnt_IE++;
if(thisScore>=85) a_num_IE++;
else if(thisScore>=80) b_num_IE++;
else if(thisScore>=70) c_num_IE++;
}
}
//2
//随机抽查10份不同的成绩样本数据
//进行及格率、良好率、优秀率的统计输出显示
System.out.println(" 随机抽查10份不同的成绩样本数据中:");
System.out.println("-->优秀率:"+100*a_num/10.0+"%");
System.out.println("-->良好率:"+100*b_num/10.0+"%");
System.out.println("-->及格率:"+100*c_num/10.0+"%");
System.out.println();
//3
//随机抽查10份不同的成绩样本数据
//所有机电学院的学生的人数和分段信息
System.out.println(" 随机抽查10份不同的成绩样本数据中:");
System.out.println("-->机电学院的学生人数:"+(int)cnt_IE);
System.out.println("-->机电学院的学生优秀率:"+100*a_num_IE/cnt_IE+"%");
System.out.println("-->机电学院的学生良好率:"+100*b_num_IE/cnt_IE+"%");
System.out.println("-->机电学院的学生及格率:"+100*c_num_IE/cnt_IE+"%");
//Collections.sort() 实现
// long cnt_IE=ar.stream()
// .filter((Student s)->s.getDept().equals("机电学院"))
// .count();
}
}
TestComparable.java
package ex0101;
import java.io.FileNotFoundException;
public class TestComparable {
public static void main(String[] args) throws FileNotFoundException {
StudentUtil su=new StudentUtil();
su.getDataFromFile();
}
}
实验二
Student.java
package ex0102;
import java.text.Collator;
//inner implementation
public class Student implements Comparable {
//variables
private String id;
private String name;
private String gender;
private String dept;
private int score;
//constructors
public Student() {}
public Student(String id,String name,String gender,String dept,int score ) {
this.id=id;
this.name=name;
this.gender=gender;
this.dept=dept;
this.score=score;
}
//methods-getter setter
public String getId() {
return id;
}
public void setId(String id) {
this.id=id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender=gender;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept=dept;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score=score;
}
//methods-show info
public void showInfo() {
System.out.print("id:"+id+"\t");
System.out.print("name:"+name+"\t");
System.out.print("gender:"+gender+"\t");
System.out.print("dept:"+dept+"\t");
System.out.print("score:"+score+"\t");
System.out.println();
}
//methods-cmp
@Override
public int compareTo(Student o) {
Collator cmp=Collator.getInstance(java.util.Locale.CHINA);
int compare=cmp.compare(this.name,o.name);
return compare;
}
}
StudentUtil.java
package ex0102;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class StudentUtil {
public void getDataFromFile() throws FileNotFoundException {
//variables
//methods-input data
File f=new File("D:\\mesrc\\java_vscode\\file\\javascore.txt");
Scanner scanner=new Scanner(f);
ArrayList ar=new ArrayList();
while(scanner.hasNext()) {
Student student=new Student(scanner.next(),scanner.next(),scanner.next(),scanner.next(),scanner.nextInt());
ar.add(student);
}
scanner.close();
//sort data
sortCharacter(ar);
//output data
printInfo(ar);
analyseIE(ar);
}
public void sortCharacter(ArrayList ar){
//inner sorting
Collections.sort(ar);
}
public void printInfo(ArrayList ar){
//print first ten students‘s info
//Ques: how to print only 10 by Lambda?
System.out.println("Students in all departments,first ten students‘s info:");
int cnt=0;
for(Student s:ar) {
s.showInfo();
cnt++;
if(cnt>9) break;
}
System.out.println();
}
public void analyseIE(ArrayList ar){
//print IE Department‘s info
//filter
System.out.println("Students In IE department:");
String d=new String("机电学院");
ar.stream().filter((Student s)->s.getDept().equals(d)).forEach(u->u.showInfo());
System.out.println();
int cnt_male=0;
int cnt_female=0;
String g=new String("男");
double sum_score=0;
int max_score=0;
int min_score=100;
for(Student s:ar) {
if(s.getDept().equals(d)){
//nums female/male
if(s.getGender().equals(g)) cnt_male++;
else cnt_female++;
//average score
sum_score+=s.getScore();
//max/min score
if(min_score>s.getScore()) min_score=s.getScore();
if(max_score
TestComparable.java
package ex0102;
import java.io.FileNotFoundException;
public class TestComparable {
public static void main(String[] args) throws FileNotFoundException {
StudentUtil su=new StudentUtil();
su.getDataFromFile();
}
}
[Java]ex01--待整
标签:要求 属性 string tables stream 生成 jta taf 推荐
原文地址:https://www.cnblogs.com/lunarwhite/p/13904289.html