Java treeSet 集合 比较器 练习

1,练习:程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入. 把所有输入的整数倒序排列打印. 

分析

1,创建Scanner对象,键盘录入

2,创建TreeSet集合对象,TreeSet集合中传入比较器

3,无限循环不断接收整数,遇到quit退出,因为退出是quit,所以键盘录入的时候应该都以字符串的形式录入 

4,判断是quit就退出,不是将其转换为Integer,并添加到集合中 

5,遍历TreeSet集合并打印每一个元素

import java.util.*;
//倒叙比较器
class MyComparator implements Comparator<Integer>{

    public int compare(Integer o1, Integer o2) {
        return o1 != o2 ? (o1 > o2 ? -1 : 1) : 0;
    }
}

public class Demo1 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入数字,以quit结束:");
        String s = input.next();
        MyComparator mc = new MyComparator();
        TreeSet set = new TreeSet(mc);//默认排序效果是由小到大,需求是由大到小 comparable?>>>comparator
        while(!s.equals("quit")) {//只要不是quit就进入循环
            Integer i = new Integer(s);//字符串转Integer            
            set.add(i);
            s = input.next();//重新录入字符串
        }
        System.out.println(set);

2,练习

需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。

分析: 

 1,定义一个学生类,成员变量:姓名,语文成绩,数学成绩,英语成绩,总成绩

                           成员方法:空参,有参构造,有参构造的参数分别是姓名,语文成绩,数学成绩,英语成绩

                           toString方法,在遍历集合中的Student对象打印对象引用的时候会显示属性值

2,键盘录入需要Scanner,创建键盘录入对象

3,创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,按照总分比较

4,录入五个学生,所以以集合中的学生个数为判断条件,如果size是小于5就进行存储

5,将录入的字符串切割,用逗号切割,会返回一个字符串数组,将字符串数组中从第二个元素转换成int数, 

6,将转换后的结果封装成Student对象,将Student添加到TreeSet集合中

7,遍历TreeSet集合打印每一个Student对象

import java.util.Scanner;
import java.util.TreeSet;
class Student implements Comparable<Student>{
    public Student() {}
    public Student(String name, int yuwen, int shuxue, int yingyu) {
        this.name = name;
        this.yuwen = yuwen;
        this.shuxue = shuxue;
        this.yingyu = yingyu;
    }
    String name;
    private int yuwen;
    private int shuxue;
    private int yingyu;
    private int total;
    public String toString() {
        return "Student [name=" + name + ", yuwen=" + yuwen + ", shuxue=" + shuxue + ", yingyu=" + yingyu + ", total="
                + total + "]";
    }
public int compareTo(Student o) { this.total = this.yuwen + this.shuxue + this.yingyu; o.total = o.yuwen + o.shuxue + o.yingyu; return this.total != o.total ? (this.total > o.total ? -1 : 1) : 0; } } public class Demo2 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("需要录入5名学生信息"); TreeSet<Student> set = new TreeSet(); for(int i = 1; i <= 5 ; i++) { System.out.println("录入第"+i+"名学生信息(姓名,语文成绩,数学成绩,英语成绩):"); String s = input.next(); String[] ss = s.split(","); Student stu = new Student(ss[0],Integer.parseInt(ss[1]),Integer.parseInt(ss[2]),Integer.parseInt(ss[3])); set.add(stu); } System.out.println(set);

 



posted @ 2020-05-13 21:01  娜梓  阅读(273)  评论(0编辑  收藏  举报