我正在尝试完成一个实验室项目,该项目要求我从.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
如果有人能够发现正在发生的事情,并向我解释错误的来源以及造成错误的原因,以便我可以看到我出错的地方,我会非常感激!