所以我有一個數獨遊戲,我正在嘗試實現一個高分系統(記錄前五名玩家)它基於球員的時間。時間越短,高分的等級越高。我曾想過如何通過流。但是,我不知道如何將高分添加到我的2D陣列(nametime[5][2]
)。我可以添加一個名字和分數,但是當我再次玩我的遊戲時,我無法添加新的名字和分數。將新名稱和分數添加到現有2D陣列+ I/O流?
變量:
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;
}
我決定,因爲我該怎麼辦與times[]
陣列後面的東西合併我names[]
和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文件中。但就我而言,這並非如此。
感謝您的回答。我是否仍然使用流來實現這一點?因爲我不能想到任何可以存儲和記住我已經存在的價值的東西。 – alicedimarco 2012-04-05 10:25:24
您可以使用相同的流方式來保存和加載這些文件。 或者,您可以創建一個新的類,該類具有「結果」作爲字段並將其聲明爲可序列化。這可能會更快,但該文件不會是人類可讀的。您可以查看以下鏈接瞭解更多詳情:http://docs.oracle.com/javase/7/docs/platform/serialization/spec/serialTOC.html – MasterF 2012-04-05 11:25:20
我很感激。另一個問題是,TreeSet能夠跟蹤已經保存的內容嗎?例如,我玩遊戲並記錄名稱+分數。當我關閉遊戲並再次打開遊戲並進行遊戲(需要另一個名稱和分數)時,TreeSet仍然保留以前的名稱+分數和當前名稱+分數嗎? – alicedimarco 2012-04-05 11:41:46