我班上有一个相当大的工作程序。它应该读取学生和教师文件,并根据他们的课程打印。这工作正常。但是,学生必须根据班级水平进行打印,老年人优先,新生最后。我检查了一些帖子,但我无法弄清楚我做错了什么。
public class Student extends Person
{
String Course;
int Credits;
int Points;
ArrayList<String> sortedStudentsList = new ArrayList<String>();
public Student(String id, String first, String last)
{
super(id,first,last);
}
public void student(String enrolledStudents) throws Exception
{
String csvFile = "StudentData.csv";
BufferedReader br = new BufferedReader(new FileReader(csvFile));
String line = null;
String firstLine = br.readLine();
while ((line = br.readLine()) != null)
{
String[] studentData = line.split(",");
super.setID(studentData[0]);
super.setFirstName(studentData[1]);
super.setLastName(studentData[2]);
setCredits(studentData[5]);
setPoints(studentData[6]);
setCourse(studentData[4]);
ArrayList<String> studentArray = new ArrayList<String>();
for(int k=0; k < 7; k--)
{
studentArray.add(studentData[k]);
}
Collections.sort(studentArray, sortStudentLevel);
if(studentData[4].equals(enrolledStudents))
{
for (int i=0; i < studentArray.size(); i++)
{
System.out.println(super.getFirstName() + " " + super.getLastName() + ", ID Number " + super.getID() + ", is a " + studentData[3] + " enrolled in " + getCourse() + ". Earned " + getCredits() + " credit(s) and " + getPoints() + " point(s)");
}
}
}
}
public static Comparator<String> sortStudentLevel = new Comparator<String>()
{
int compare(String s1, String s2)
{
String classLevel1 = s1.getClassLevel();
String classLevel2 = s2.getClassLevel();
return classLevel1.compareTo(classLevel2);
}
};
}
我遗漏了这堂课的主持人和吸气鬼,因为我认为他们并不那么重要。任何帮助表示赞赏。
编辑:代码格式
答案 0 :(得分:3)
1)您想要对学生列表进行排序。 s1.getClassLevel()
无法解析String s1
。您需要Comparator<Student>
2)要对Student
列表进行排序,您需要ArrayList<Student>
而不是ArrayList<String>();
3)对于CSV文件的每一行,您都制作了一个全新的空studentArray = new ArrayList<String>();
4)您在循环中以studentData[k]
向后循环<{1}}
5)k--
似乎没有被定义。 enrolledStudents
在问题的背景下确实没有意义。你只想对打印清单进行排序,对吧?
6)if(studentData[4].equals(enrolledStudents))
班级不应该负责阅读CSV文件。这是一个模型。它只保存数据,不执行与Student
无关的任何逻辑。
7)也许在学生上实施Student
方法。
toString()
8)比较类级别的字符串时出现警告。我相信@Override
public void toString() {
return super.getFirstName() + " " + super.getLastName() + ", ID Number " + super.getID() + ", is a " + getClassLevel() + " enrolled in " + getCourse() + ". Earned " + getCredits() + " credit(s) and " + getPoints() + " point(s)";
}
评估为"10".compareTo("9") < 0
,而true
评估为"sophomore".compareTo("senior") < 0
。
总而言之,这应该在false
方法中,或者在main
类之外的其他地方。
Student