我试图在java中为我的蛇游戏排序我的高分:我希望能够从文件中对它们进行排序。
该文件的一个例子是:
我怎样才能对名称进行排序,以及所有名称:
如果您可以解释如何操作,请先发送一些代码,如果您之前已经完成,或者发送给我的链接解释得很好,那就太棒了!感谢
答案 0 :(得分:0)
你需要一个最大堆
逐行读取文件中的所有值。读取时使用拆分功能拆分:。这会给你一个名字,然后是分数。创建一个id为score的对象,value为包含score和name的对象。 (你需要考虑相同的分数)。
String [] values = input.split(" :); String name = values [0]; 字符串得分=值[1];
创建最大堆并将元素逐个插入堆中。 - 在java中,您可以将PriorityQueue对象用于此数据结构
完成后,请逐个弹出元素。这将按降序为您提供所有元素。由于您的对象包含得分和名称,因此您可以使用它以降序打印结果
使用"民意调查" PriorityQueue的方法来实现这个
http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
答案 1 :(得分:-1)
正如我的评论所述:
逐行读取输入文件,将正则表达式匹配的值存储到TreeMap(已排序的HashMap,在这种情况下反向排序),然后以正确的顺序将这些值写回文件。 / p>
输入:" scores.txt":
1. George : 200
2. Sarah : 700
3. Ben : 100
4. Fred : 400
5. AJ : 300
输出:
1. Sarah : 700
2. Fred : 400
3. AJ : 300
4. George : 200
5. Ben : 100
import java.util.*;
import java.util.regex.*;
import java.io.*;
public class regex {
public static void main(String args[]) throws java.io.IOException {
File file = new File("scores.txt");
Scanner scan = new Scanner(file);
//create a TreeMap in reverse order otherwise it will sort ascending instead of descending
Map<Integer, String> map = new TreeMap<Integer, String>(Collections.reverseOrder());
String regexp = "\\d*\\.\\s*([a-zA-Z]*)\\s*\\:\\s*(\\d*)";
Pattern pattern = Pattern.compile(regexp);
while(scan.hasNextLine()) {
Matcher match = pattern.matcher(scan.nextLine());
while (match.find()) {
//insert into the map the score : name ---> (\\d*) : ([a-zA-Z]*)
map.put(Integer.parseInt(match.group(2)), match.group(1));
}
}
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
int count = 1;
for (Map.Entry entry : map.entrySet()) {
//writes -> 1. George : 100 \n
bw.write(count + ". " + entry.getValue() + " : " + entry.getKey() + "\n");
count++;
}
bw.close();
}
}