0

所以我有一个数独游戏,我正在尝试根据玩家的时间为它实现一个高分系统(记录前 5 名玩家) 。时间越短,高分中的排名越高。我已经考虑过如何通过流来实现它。但是,我不知道如何将的高分添加到我的二维数组 ( 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 文件中。但就我而言,这不是正在发生的事情。

4

1 回答 1

1

我建议创建一个包含玩家时间对的类。此外,也许使用一些 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]
于 2012-04-05T09:36:51.443 回答