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

时间:2014-09-08 06:07:11

标签: java

这是我刚开始的Java课程。有类似的问题要求对数组中给出的值进行排序;我知道如何做到这一点,但在这里我需要读取一个文本文件,然后对值进行排序并按员工姓名和他们工作的小时数显示它们,同时保持从最多到最少的顺序。这就是文本文件的样子:

  

Jim 4 5 6 1 2 3 4
  哈利6 5 1 3 9 2 0
  约翰福音2 3 1 6 7 8 4
  丽莎2 1 5 4 1 2 6

以下是我所知道的关于阅读文本文件和我目前该项目代码的知识。

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

}

3 个答案:

答案 0 :(得分:1)

解析

查看java.util.Scanner的Javadoc,或者在IDE中使用自动完成功能,您将看到比nextLine()等更多的方法,感兴趣的

  • 当下一个标记是数字
  • 时,hasNextInt()返回true
  • nextInt()下一个整数

存储

现在你需要存储你的数字,我推荐一个List,因为你不知道有多少预先排除原始数组。

  • 使用List hours = new ArrayList();
  • 创建一个列表
  • 使用add()
  • 添加到它

您还需要存储您的员工姓名,为简单起见,我建议您使用字符串映射到小时列表,即地图>。

  • 使用地图创建> employeeHours = new HashMap>()
  • 添加到使用employeeHours.put(名称,小时)

排序

java.util.Collections.sort就是您所需要的。这将默认按升序对列表进行排序。

显示

默认情况下,大多数内置列表实现都会实现toString(),因此您只需调用System.out.println(小时)

答案 1 :(得分:0)

您应该在HashMap中保存工作小时数和员工姓名。

http://en.wikipedia.org/wiki/Hash_table有关HashMap的解释。

存储您的值后,您可以按照以下链接中的说明对HashMap进行排序: Sort a Map<Key, Value> by values (Java)

答案 2 :(得分:0)

您应该在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));
        }
    }
}