向现有2D阵列+I/O流添加新名称和分数



所以我有一个数独游戏,我正试图根据玩家的时间为它实现一个高分系统(记录前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]

相关内容

  • 没有找到相关文章

最新更新