码迷,mamicode.com
首页 > 编程语言 > 详细

[Java]ex01--待整

时间:2020-10-31 02:30:48      阅读:19      评论:0      收藏:0      [点我收藏+]

标签:要求   属性   string   tables   stream   生成   jta   taf   推荐   

上机目标

  • 使用OO的思想封装代码
  • 使用比较器(内部和外部比较器)完成OO的比较排序
  • 学会使用Lambda表达式
  • Java API的随机数生成、集合类的使用
  • Java String的应用初探

分别实现

  • 基于成绩(数值类型)的比较及统计:
    • (1) 请按照成绩进行排序(升序或者降序),排序之后,按照分数段显示学生的姓名、学号、学院、如下分数段人数汇总,并输出相关信息(输出格式自己定义)不及格:<70分//及格:70分<= <80分//良好:80分<=成绩<85//优秀:>=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(){ })
        • 在外部进行Comparator匿名内部类使用
      • 这(1)和(2)可以选择其一。他们之间的区别,使用(2)比较灵活 ,如果按照多个关键词排序的时候,可以随时写多个sort,然后new若干个Comparator这样的匿名内部类,对不同的属性(例如学号或者姓名或者成绩)进行比较定义

参考帮助

可选作业

我的代码

实验一

Student.java

package ex0101;

//inner implementation
public class Student implements Comparable<Student> {
	//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<Student> ar=new ArrayList<Student>();
		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<Student> ar){
		//inner sorting
		Collections.sort(ar);
	}
	public void printInfo(ArrayList<Student> ar){
		//1
		//按照成绩进行排序
		//按照分数段显示学生的姓名、学号、学院、如下分数段人数汇总
		//并输出相关信息
		System.out.println("<1> 不同分数段的学生信息:");

		//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()<85)
			.forEach(u->u.showInfo());
		System.out.println("-->及格:");
		ar.stream()
			.filter((Student s)->s.getScore()>=70&&s.getScore()<80)
			.forEach(u->u.showInfo());
		System.out.println("-->不及格:");
		ar.stream()
			.filter((Student s)->s.getScore()<70)
			.forEach(u->u.showInfo());

		System.out.println();
	}	
	public void analyseRandom(ArrayList<Student> ar){
		// get random num with HashSet
		Random r=new Random();
		HashSet<Integer> hs=new HashSet<>();
		while(hs.size()<10){
			hs.add(r.nextInt(ar.size())+1);
		}

		double a_num=0;
		double b_num=0;
		double c_num=0;
		double cnt_IE=0;
		double a_num_IE=0;
		double b_num_IE=0;
		double c_num_IE=0;

		for (Integer i:hs) {
			int thisScore=ar.get(i).getScore();
			if(thisScore>=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("<2> 随机抽查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("<3> 随机抽查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<Student> {
	//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<Student> ar=new ArrayList<Student>();
        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<Student> ar){
		//inner sorting
		Collections.sort(ar);
	}

	public void printInfo(ArrayList<Student> 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<Student> 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<s.getScore()) max_score=s.getScore();
			}
		}
		System.out.println("In IE department:");
		System.out.println(cnt_male+" students are male.");
		System.out.println(cnt_female+" students are female.");
		System.out.print("Average Score:\t");
		System.out.println(String.format("%.2f", sum_score/(double)(cnt_male+cnt_female)));
		System.out.println("Max Score:\t"+max_score);
		System.out.println("Min Score:\t"+min_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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!