Java 将新名称和分数添加到现有二维数组+;I/O流?

Java 将新名称和分数添加到现有二维数组+;I/O流?,java,arrays,stream,storage,Java,Arrays,Stream,Storage,因此,我有一个数独游戏,我正在尝试实施一个高分系统(记录前5名玩家),基于玩家的时间。时间越短,得分越高。我一直在思考如何穿越溪流。但是,我不知道如何在我的2D数组中添加新的高分(nametime[5][2])。我可以添加一个名字和分数,但当我再次玩我的游戏时,我不能添加一个新的名字和分数 变量: private String[][] nametime = new String[5][2]; private String[] names = new String[5];

因此,我有一个数独游戏,我正在尝试实施一个高分系统(记录前5名玩家),基于玩家的时间。时间越短,得分越高。我一直在思考如何穿越溪流。但是,我不知道如何在我的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);
    }
我只为他们的第一个索引指定了名称和分数,
名称[0]
次数[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;
    }
此方法用于创建存储my
nametime[][]
数组的my a文件

//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;

}
我会感激任何能帮助我的人


编辑:这里再次重申我的问题。当我玩完游戏后,它应该在数组和.txt文件中记录玩家姓名和分数。然后我结束比赛。当我打开游戏并再次完成游戏时,它必须再次将名称和分数存储到数组和.txt文件中。但在我的例子中,情况并非如此。

我建议创建一个包含玩家时间对的类。另外,可以使用一些Collections类来保持结果的排序

下面是一个示例(使用TreeSet按时间升序保存结果):

import java.util.Iterator;
导入java.util.SortedSet;
导入java.util.TreeSet;
公开课考试{
静态类结果实现了可比较的{
字符串名;
整数时间;
公共结果(字符串名称,整数时间){
this.name=名称;
这个时间=时间;
}
公共整数比较(结果o){
返回this.time-o.time;
}
@凌驾
公共字符串toString(){
返回“Result[name=“+name+”,time=“+time+””;
}
}
公共静态void main(字符串[]args){
SortedSet结果=新树集();
结果。添加(新结果(“a”,5));
结果。添加(新结果(“b”,3));
结果。添加(新结果(“c”,1));
结果。添加(新结果(“d”,15));
结果。添加(新结果(“e”,10));
结果。添加(新结果(“f”,8));
结果。添加(新结果(“g”,9));
结果。添加(新结果(“h”,11));
结果。添加(新结果(“i”,7));
结果。添加(新结果(“j”,20));
Iterator it=results.Iterator();
int i=0;
while(it.hasNext()){
System.out.println(it.next());
i++;
如果(i==5){
打破
}
}
}
}
输出:

Result [name=c, time=1] Result [name=b, time=3] Result [name=a, time=5] Result [name=i, time=7] Result [name=f, time=8] 结果[名称=c,时间=1] 结果[名称=b,时间=3] 结果[名称=a,时间=5] 结果[name=i,time=7] 结果[名称=f,时间=8]
谢谢你的回答。我是否仍然使用流来实现这一点?因为我想不出任何东西可以存储和记住我已经输入的值。你可以使用相同的流方法来保存和加载这些值。或者,您可以创建一个将“results”作为字段的新类,并将其声明为可序列化。这可能会更快,但该文件将不是人类可读的。您可以查看此链接了解更多详细信息:非常感谢。另一个问题是,树集是否能够跟踪已保存的内容?例如,我玩游戏并记录名称+分数。当我关闭游戏并再次打开它并开始游戏(需要另一个名称和分数)时,TreeSet是否仍保留以前的名称+分数和当前名称+分数?如果关闭游戏意味着退出应用程序,则需要保存TreeSet内容并在新游戏开始时重新加载。如果我保存TreeSet的内容,我必须通过流来写,对吗?一旦我这样做了,我如何向保存的树集添加新值?
//method for showing the table and frame
public void showFrame(){
        table = new JTable(loadScoreFile(), header);
        *other GUI stuff here*
}
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;
         }
      }
   }
}
Result [name=c, time=1] Result [name=b, time=3] Result [name=a, time=5] Result [name=i, time=7] Result [name=f, time=8]