我需要帮助排序inputfile / highscore我已经尝试过Holder-comparator,Collections.Sort和我现在试图使它成为一个数组列表,所以高分数按时间排序我尝试但失败了,我真的卡住了已经被困了好几天了。 Anny sugestions很可爱
import java.io.*;
import java.util.*;
public class game {
private static void start() throws IOException {
int number = (int) (Math.random() * 1001);
BufferedReader reader;
reader = new BufferedReader(new InputStreamReader(System.in));
Scanner input = new Scanner(System.in);
String scorefile = "p-lista_java";
int försök = 0;
int gissning = 0;
String namn;
String line = null;
String y;
String n;
String val ;
String quit = "quit";
String Gissning;
System.out.println("Hello and welcome to this guessing game" +
"\nStart guessing it's a number between 1 and 1000: ");
long startTime = System.currentTimeMillis();
while (true || (!( input.next().equals(quit)))){
System.out.print("\nEnter your guess: ");
gissning = input.nextInt();
försök++;
if (gissning == number ){
long endTime = System.currentTimeMillis();
long gameTime = endTime - startTime;
System.out.println("Yes, the number is " + number +
"\nYou got it after " + försök + " guesses " + " times in " + (int)(gameTime/1000) + " seconds.");
System.out.print("Please enter your name: ");
namn = reader.readLine();
try {
BufferedWriter outfile
= new BufferedWriter(new FileWriter(scorefile, true));
outfile.write(namn + " " + försök +"\t" + (int)(gameTime/1000) + "\n");
outfile.close();
} catch (IOException exception) {
}
break;
}
if( gissning < 1 || gissning > 1000 ){
System.out.println("Stupid guess! I wont count that..." );
--försök;
}
else if (gissning > number){
System.out.println(" Your guess is too high");
}
else
System.out.println("Your guess is too low");
}
try {
BufferedReader infile
= new BufferedReader(new FileReader(scorefile));
while ((line = infile.readLine()) != null) {
System.out.println(line);
}
infile.close();
} catch (IOException exception) {
}
System.out.println("Do you want to continue (Y/N)?");
val=reader.readLine();
if ((val.equals("y"))||(val.equals("Y"))){
game.start();
}
else
System.out.print("Thanks for playing");
System.exit(0);
}
public static void main (String[] args) throws IOException {
game.start();
}
}
答案 0 :(得分:0)
有很多方法可以实现这一目标。可能最简单的是在将分数打印到屏幕之前对分数进行排序。首先,将得分线放在列表中。
BufferedReader infile = new BufferedReader(new FileReader(scorefile));
List<String> scores = new ArrayList<String>();
while ((line = infile.readLine()) != null) {
scores.add(line);
}
infile.close();
现在您可以对列表进行排序。您可以使用sort
类的Collections
方法,但您必须使用自定义Comparator
。由于您的高分的格式类似于<name>\t<steps>\t<time>
,因此您可以split
空格行,将第三个元素解析为数字并比较这些数字。
Collections.sort(scores, new Comparator<String>() {
public int compare(String s1, String s2) {
int t1 = Integer.parseInt(s1.split("\\s")[2]); // time in s1
int t2 = Integer.parseInt(s2.split("\\s")[2]); // time in s2
return t1 - t2; // neg. if t1 < t2
}
});
这会对就地scores
的列表进行排序,所以剩下要做的就是实际打印得分:
System.out.println("Name Steps Time");
for (String s : scores) {
String[] ps = s.split("\\s");
System.out.println(String.format("%-10s %5s %5s", ps[0], ps[1], ps[2]));
}