Java:按类级别对学生进行排序

时间:2016-10-15 23:45:38

标签: java sorting

我班上有一个相当大的工作程序。它应该读取学生和教师文件,并根据他们的课程打印。这工作正常。但是,学生必须根据班级水平进行打印,老年人优先,新生最后。我检查了一些帖子,但我无法弄清楚我做错了什么。

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);
       }
   };
}

我遗漏了这堂课的主持人和吸气鬼,因为我认为他们并不那么重要。任何帮助表示赞赏。

编辑:代码格式

1 个答案:

答案 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