使用Java中的可比较和比较器对列表进行排序

时间:2016-04-11 23:17:33

标签: java sorting comparator comparable

我正在尝试完成一个实验室项目,该项目要求我从.txt文件中读取数据,并使用可比较和比较器以各种方式对其进行排序。该列表是学生及其在两个测试中的成绩,需要以各种方式进行分类:按名称顺序,按一年级顺序,按二年级排序,按总成绩顺序,使用.sort方法和比较器。我认为我已经完成了大部分工作,但每次我尝试运行程序时,都会收到错误:java.lang.NumberFormatException:对于输入字符串:“”。我根本无法打印出来,看看我是否完成了所有其余的代码。我不确定在哪里修理它;起初我以为它是在我的String数组的初始声明中但是如果我取出那个空格(转(“”)到(“”))我得到相同的错误,但是:java.lang.NumberFormatException:对于输入字符串:“e”。我觉得我可能错过了一些非常容易和明显的东西,但这让我很难过。

这是我的代码。单独的Student类包含getter和构造函数,如果需要,可以发布。

public class Program {

public static void main(String[]args)
{
    try {

        BufferedReader br=new BufferedReader(new FileReader("grades.txt"));
        String line=br.readLine();
        List<Student> s=new ArrayList<Student>();

        while(line!=null)
        {
            String array[]=line.split(" ");
            Student ob=new Student(array[0],Integer.parseInt(array[1]),Integer.parseInt(array[2]));
            s.add(ob);
            line=br.readLine();

        }

        System.out.println("Here is the data as initially read in:");
        for(int i=0;i<s.size();i++)
        {
            System.out.printf("%-10s %3d %3d\n", s.get(i).getName(), s.get(i).getScore1(), s.get(i).getScore2());


        }
        System.out.println("**************");

        System.out.println("Data After Normal Sorting");
        Collections.sort(s);
        for(int i=0;i<s.size();i++)
        {
            System.out.printf("%-10s %3d %3d\n", s.get(i).getName(), s.get(i).getScore1(), s.get(i).getScore2());


        }
        System.out.println("**************");
        System.out.println("Sorting on the basis of First Score");
        Comparator<Student> myComparator1 = (o1, o2) -> {
            int result = String.valueOf(o2.getScore1()).compareTo(String.valueOf(o1.getScore1()));
            return result;

        };
        Collections.sort(s, myComparator1);
        Collections.reverse(s);
        for(int i=0;i<s.size();i++)
        {
            System.out.printf("%-10s %3d %3d\n", s.get(i).getName(), s.get(i).getScore1(), s.get(i).getScore2());


        }
        System.out.println("**************");

        Comparator<Student> myComparator2 = (o1, o2) -> {
            int result = String.valueOf(o2.getScore2()).compareTo(String.valueOf(o1.getScore2()));
            return result;

        };
        Collections.sort(s, myComparator2);
        Collections.reverse(s);
        System.out.println("Sorting on the basis of Second Score");

        for(int i=0;i<s.size();i++)
        {
            System.out.printf("%-10s %3d %3d\n", s.get(i).getName(), s.get(i).getScore1(), s.get(i).getScore2());


        }

        System.out.println("**************");

        System.out.println("Sorting on the basis of Total Sum of Score");

        Comparator<Student> myComparator3 = (o1, o2) -> {
            int result = String.valueOf(o2.getScore1()+o2.getScore2()).compareTo(String.valueOf(o1.getScore1()+o1.getScore2()));
            return result;

        };
        Collections.sort(s, myComparator3);
        Collections.reverse(s);
        for(int i=0;i<s.size();i++)
        {
            System.out.printf("%-10s %3d %3d\n", s.get(i).getName(), s.get(i).getScore1(), s.get(i).getScore2());


        }


        System.out.println("**************");




    }
    catch (Exception e) {

        System.out.println(e.toString());
    }
}

}

作为参考,grades.txt文件中的文本如下:

Deirdre     70  62
Florence    37  90
Chris       60  68
Aaron       53  80
Elmer       91  40
Betty       79  50

如果有人能够发现正在发生的事情,并向我解释错误的来源以及造成错误的原因,以便我可以看到我出错的地方,我会非常感激!

0 个答案:

没有答案