Java 将新名称和分数添加到现有二维数组+;I/O流?
因此,我有一个数独游戏,我正在尝试实施一个高分系统(记录前5名玩家),基于玩家的时间。时间越短,得分越高。我一直在思考如何穿越溪流。但是,我不知道如何在我的2D数组中添加新的高分(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];
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;
}
此方法用于创建存储mynametime[][]
数组的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]