【问题标题】:Reading and writing a text file in ascending order. ( Small/annoying error- nearly completed)按升序读取和写入文本文件。 (小/烦人的错误 - 几乎完成)
【发布时间】:2015-06-21 19:04:46
【问题描述】:
    Collections.sort(orderedStudents, new Comparator<Student>() {
        public int compare(Student s1, Student s2) {
            return s2.getAggregate().compareTo(s1.getAggregate());
        }
    });

这是我使用的方法。

【问题讨论】:

  • 有什么问题?排序错误?我读了这个问题,但我不明白编辑后你会得到什么
  • @user2340612 它什么也没做,我不知道该怎么做。
  • 你在写入文件后进行排序
  • @user2340612 你的意思是在你写入文件之前?当我在写作之前做 Collections.sort 时,什么都没有改变。
  • 是的,我的意思是现在您在将数组写入文件后对其进行排序,而您应该以相反的顺序执行操作(例如,排序应该在创建 writer 对象后立即进行)。理论上这将解决问题

标签: java arraylist io writer reader


【解决方案1】:

问题在于getAggregate方法:

public Double getAggregate(){
    double d = 0;
    double aggregatescore = d/marks.size();
    return aggregatescore;
}

由于 d 设置为零,该方法将始终返回 0,因此 Collections.sort(...) 方法将什么也不做

【讨论】:

  • 我太傻了。完全忘记改变它了。我修好了,谢谢。
  • 别担心,这些事情都会发生 :) 另外我建议在打印到文件时也使用getAggregate(现在你正在重新计算这个值)
【解决方案2】:

您编写的代码会写入文件、对数据进行排序、丢弃数据。如果您希望结果出现在文件中,则必须在写入前进行排序。

更像这样:

   Collections.sort(orderedStudents, new Comparator<Student>() {
        public int compare(Student s1, Student s2) {
            return s2.getAggregate().compareTo(s1.getAggregate());
        }
    });

    // Now we can do writing.
    writer = new PrintWriter(new FileOutputStream(new File("RankedList.txt")));
    for (Student s: orderedStudents) {
        s.writeToPW(writer);
    }
    writer.close();

如果订单看起来是降序而不是升序,则在比较函数中交换 s1 和 s2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2019-11-29
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    相关资源
    最近更新 更多