所以我有一个数独游戏,我正试图根据玩家的时间为它实现一个高分系统(记录前5名玩家)。时间越短,在高分中的排名就越高。我想过如何通过流。但是,我不知道如何将NEW高分添加到我的2D数组(nametime[5][2]
)中。我可以添加一个名字和分数,但当我再次玩游戏时,我不能添加新的名字和分数。
变量:
private String[][] nametime = new String[5][2];
private String[] names = new String[5];
private String[] times = new String[5];
以下是我迄今为止所做的:
//assigns values to names[] and times[]
private void addNamesAndTimes(String name, String score){
names[0] = name;
times[0] = score;
System.out.println("Player: " + name + " || " + "Time: " + score);
}
我只为它们的第一个索引names[0]
和times[0]
分配了名称和分数,因为这就是我的问题所在。我不知道如何不断地向数组添加名称和分数。
//merges names[] and times[] array into one 2D array nametime[][]
private String[][] mergeArrays(String[] a, String[] b){
for(int i = 0; i < nametime.length; i++){
nametime[i][0] = a[i];
nametime[i][1] = b[i];
}
return nametime;
}
我决定合并我的names[]
和times[]
数组,因为我稍后会对times[]
数组做些什么。(分数比较)
public void createScoreFile(String name, String score){
addNamesAndTimes(name, score);
File file = new File("Scores.txt");
try {
if(!file.exists()){
System.out.println("Creating new file...");
file.createNewFile();
}
FileOutputStream fo = new FileOutputStream(file, true);
PrintStream ps = new PrintStream(fo);
for(int i = 0; i < nametime.length; i++){
for(int j = 0; j < nametime[0].length; j++){
ps.print(mergeArrays(names, times)[i][j] + "t");
}
ps.println();
}
ps.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
此方法用于创建存储nametime[][]
阵列的文件
//reads the contents of the text file and outputs it back to nametime[][]
public String[][] loadScoreFile(){
File file = new File("Scores.txt");
try {
Scanner scan = new Scanner(file);
for(int i = 0; i < nametime.length; i++){
for(int j = 0; j < nametime[i].length; j++){
nametime[i][j] = scan.next();
}
}
System.out.println("Nametime Array:");
for(int i = 0; i < nametime.length; i++){
for(int j = 0; j < nametime[i].length; j++){
System.out.print(nametime[i][j] + "t");
}
System.out.println();
}
} catch(Exception ex) {
ex.printStackTrace();
}
return nametime;
}
此方法用于读取我的Score.txt文件
//method for showing the table and frame
public void showFrame(){
table = new JTable(loadScoreFile(), header);
*other GUI stuff here*
}
我会感谢任何能帮助我的人!
编辑:这里再次重申我的问题。当我玩完游戏后,它应该在数组和.txt文件中记录玩家的名字和分数。然后我结束了比赛。当我打开游戏并再次完成游戏时,它必须再次将名称和分数存储到数组和.txt文件中。但就我而言,情况并非如此。
我建议创建一个包含玩家时间对的类。另外,可以使用一些Collections类来保持结果的排序。
下面是一个例子(使用TreeSet按时间升序保存结果):
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
public class Test {
static class Result implements Comparable<Result> {
String name;
int time;
public Result(String name, int time) {
this.name = name;
this.time = time;
}
public int compareTo(Result o) {
return this.time - o.time;
}
@Override
public String toString() {
return "Result [name=" + name + ", time=" + time + "]";
}
}
public static void main(String[] args) {
SortedSet<Result> results = new TreeSet<Result>();
results.add(new Result("a", 5));
results.add(new Result("b", 3));
results.add(new Result("c", 1));
results.add(new Result("d", 15));
results.add(new Result("e", 10));
results.add(new Result("f", 8));
results.add(new Result("g", 9));
results.add(new Result("h", 11));
results.add(new Result("i", 7));
results.add(new Result("j", 20));
Iterator<Result> it = results.iterator();
int i = 0;
while (it.hasNext()) {
System.out.println(it.next());
i++;
if (i == 5) {
break;
}
}
}
}
输出:
结果[名称=c,时间=1]结果[名称=b,时间=3]结果[名称=a,时间=5]结果[名称=i,时间=7]结果[名称=f,时间=8]