java TreeSet 集合自定义集合比较器的算法实现例题

import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
public class Main {
    public static void main(String[] rags) {
        //录入学生成绩
        Scanner sr = new Scanner(System.in);
        Scanner in = new Scanner(System.in);
        int n = sr.nextInt();
        //TreeSet<Students> set = new TreeSet<Students>();
      //创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,安装总分比较
      TreeSet<Students> set = new TreeSet<Students>(new Comparator<Students>() {  //匿名内部类
               @Override
               public int compare(Students s1, Students s2) {
                  int num  = s2.getSum()-s1.getSum();
                  return num==0 ? 1:  num;
               }
      });
        while(set.size()<n) {
            String line1 = sr.nextLine(); //吃回车符
            String line  = sr.nextLine();
            String[] arr = line.split(" ");
            int chinese = Integer.parseInt(arr[1]);
            int math = Integer.parseInt(arr[2]);
            int english = Integer.parseInt(arr[3]);
            set.add(new Students(arr[0],chinese,math,english));
        }
        //遍历TreeSet集合打印每一个Student对象
        for (Students student : set) {
            System.out.println(student);
        }
    }
}

注意:在此题我发现了一个东西,当我们创建同一个 Scanner sr  的引用时候会发现,开始输入 sr.nextInt();

没毛病,但是此时如果你在输入 sr.nextLine() 对不起 有毛病,这时候你就会发现,根本没有输入进数据,但是这时候,我查了一下,应该是同一个引用连续输入,可能导致会输入回车符,个人理解好像是内存机制的问题,此时有两种解决办法,一种是sr.nextLine(), 吃回车符吗,一个是重新创建一个引用。而且我又深入理解了一下next 和nextLine的区别:

 

关于nextLine()和next()的使用

关键在于:next() 方法遇见第一个有效字符(非空格,换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描。、

这时使用nextLine(),继续读,有可能读入第一个字符是空格或换行符。

 

    在实现字符窗口的输入时,我个人更喜欢选择使用扫描器Scanner,它操作起来比较简单。

在写作业的过程中,我发现用Scanner实现 字符串的输入有两种方法,一种是next(),一种

是nextLine(),但是这两种方法 究竟有什么区别呢?

    我查了一些资料总结如下:

    next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab、

或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法

才将其后的输入的空格键、Tab或Enter键等视为分隔符或结束符。简单地说,next()查找并返回

来自此扫描器的下一下完整标记。完整标记的前后是与分隔模式的输入信息,所以next方法不能得到

带空格的字符串。

    而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是

可以得到带空格的字符串的。

 

 

猜你喜欢

转载自blog.csdn.net/qq_41479464/article/details/88045154
今日推荐