Java-读入文本文件,从最多到最少计算员工工时

Java-读入文本文件,从最多到最少计算员工工时,java,Java,这是我的Java初级课程。对数组中给定的值进行排序时也会遇到类似的问题;我知道如何做到这一点,但在这里,我需要读取一个文本文件,然后对值进行排序,并按员工姓名和工作时间显示它们,同时保持从大到小的顺序。这是文本文件的外观: 吉姆4561234 哈利65131920 约翰2 3 1 6 7 8 4 丽莎2154126 下面是我所知道的关于阅读文本文件和我当前的项目代码的全部内容 import java.util.Scanner; import java.io.File; import java.i

这是我的Java初级课程。对数组中给定的值进行排序时也会遇到类似的问题;我知道如何做到这一点,但在这里,我需要读取一个文本文件,然后对值进行排序,并按员工姓名和工作时间显示它们,同时保持从大到小的顺序。这是文本文件的外观:

吉姆4561234 哈利65131920 约翰2 3 1 6 7 8 4 丽莎2154126

下面是我所知道的关于阅读文本文件和我当前的项目代码的全部内容

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

public class EmployeeWorkHours {

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);

    File file = new File("/Users/ODonnell/Desktop/inputData.txt");

    try {

        Scanner scanner = new Scanner(file);

            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                System.out.println(line);

            }
            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

}

您应该将工作时间和员工姓名保存在HashMap中

对于HashMap的解释

存储值后,您可以按照以下链接中的说明对HashMap进行排序:

解析 查看Javadoc,或者在IDE中使用autocomplete,您将看到比nextLine等更有趣的方法

当下一个标记为数字时,hasNextInt返回true 下一个整数 存储 现在您需要存储数字,我建议您列出一个列表,因为您不知道前面有多少个数字,这排除了基本数组

创建一个列表,列表小时数=新建ArrayList; 用Add添加到它 您还需要存储您的员工姓名,为简单起见,我建议使用字符串到小时列表的映射,即Map>

使用Map>employeeHours=newhashmap> 使用employeeHours.putname添加到,小时数 分类 这就是你所需要的。默认情况下,这将按升序对列表进行排序

展示
默认情况下,大多数(如果不是全部的话)内置列表实现都实现toString,因此您可以简单地调用System.out.PrintLNHurs

您应该在scanner实例上使用next方法来读取下一个令牌,而不是整行令牌。然后,您必须尝试将其解析为整数,以识别它是员工的名称还是工作时间。在for循环中,我们使用Collections实用程序类对数据进行排序并打印它

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class EmployeeWorkHours {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        File file = new File("inputData.txt");
        Map<String, List<Integer>> data = new HashMap<String, List<Integer>>();

        try {

            Scanner scanner = new Scanner(file);
            List<Integer> currentEmployee = null;

            while (scanner.hasNextLine()) {
                String token = scanner.next();
                try {
                    currentEmployee.add(new Integer(token));
                } catch (NumberFormatException e) {
                    currentEmployee = new ArrayList<Integer>();
                    data.put(token, currentEmployee);
                }
            }
            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        for (String name : data.keySet()) {
            Collections.sort(data.get(name));
            Collections.reverse(data.get(name));
            System.out.println(name + " " + data.get(name));
        }
    }
}