这是我刚开始的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();
}
}
}
答案 0 :(得分:1)
查看java.util.Scanner的Javadoc,或者在IDE中使用自动完成功能,您将看到比nextLine()等更多的方法,感兴趣的
现在你需要存储你的数字,我推荐一个List,因为你不知道有多少预先排除原始数组。
您还需要存储您的员工姓名,为简单起见,我建议您使用字符串映射到小时列表,即地图>。
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));
}
}
}