按递减顺序打印文件内容java

时间:2018-06-05 13:47:44

标签: java

我需要编写一个Java程序,在那里我可以从具有学生姓名和成绩的文件中读取数据。我必须找到每个学生的最高分,然后在新文件中写下他的名字和最高分。我能够做到这一点。问题是,学生应该根据他们的最高成绩按递减顺序打印,我无法知道如何做到这一点。你能帮我吗?谢谢!

public class NotaMax {
    public static void main(String args[]) throws FileNotFoundException{
        Scanner input=new Scanner(new File("teksti.txt"));
        PrintStream output=new PrintStream(new File("max.txt"));
        while(input.hasNextLine()) {
            String rreshti=input.nextLine();
            max(rreshti,output);
        }
    }

    public static void max(String text,PrintStream output) {
        Scanner data=new Scanner(text);
        String emri=data.next();
        double max=0;
        while(data.hasNext()) {
            double nota=data.nextDouble();
            if(nota>max) {
                max=nota;
            }
        }
        output.println(""+emri+":"+max);
    }
}

3 个答案:

答案 0 :(得分:1)

这有两种方法,一种填补另一种方法。

您可以将它们保存在Array#reverse中,然后调用方法ArrayList,以便反转Object。要添加另一层确定性,最好将Class / Student命名为Comparator并将#sort应用于ArrayList方法Student Object以确保结果。 然而,这比处理这个问题的最简单,最有效的方法需要更多的步骤。

您可以做的最好的事情是将ArrayList保存在HashSet(或Comparable Collection/Map,实际上是#sort)内,并使用:hashtag方法从下到上排序。 我可以(如果要求)为此提供一些代码。

答案 1 :(得分:1)

我想到的第一件事是为您的学生创建一个单独的类,并将一个简单的二进制堆实现为最大堆,每个学生的最高成绩作为排序标准。然后打印它。不应该努力。

答案 2 :(得分:0)

这应该可以解决您的问题。首先在地图中阅读teksti.txt中的学生和成绩,然后找到每个学生的最高成绩。

public class NotaMax {
    private static Map<String, ArrayList<Integer>> students = new HashMap<>();

    private static void readTeksti() throws FileNotFoundException {
        Scanner input = new Scanner(new File("teksti.txt"));

        // read teksti.txt
        String[] line;
        while (input.hasNextLine()) {
            String rreshti = input.nextLine();
            line = rreshti.split(" ");
            ArrayList<Integer> grades = students.get(line[0]);

            if (grades == null) {
                grades = new ArrayList<>();
                grades.add(Integer.parseInt(line[1]));
                students.put(line[0], grades);
            } else {
                grades.add(Integer.parseInt(line[1]));
            }
        }
    }

    public static void main(String args[]) throws FileNotFoundException {

        readTeksti();

        max();

    }

    private static void max() throws FileNotFoundException {

        PrintStream output = new PrintStream(new File("max.txt"));
        List<Map.Entry<String,Integer>> maximums = new LinkedList<>();

        for (String current : students.keySet()) {
            ArrayList<Integer> grades = students.get(current);
            Integer max = Collections.max(grades);

            maximums.add(new AbstractMap.SimpleEntry<>(current, max));
        }

        Collections.reverse(maximums);

        for (Map.Entry<String,Integer> current : maximums) {
            output.println("" + current.getKey() + ":" + current.getValue());
        }
    }
}

我认为teksti.txt就像:

saman 100
samad 80
samsam 70
samsam 90
saman 90