所以我在学校的最后一个项目有问题。我正在创建一个高分榜单的游戏,但我需要有十个人出现,而且我只有5个人,我没有一个线索如何解决它。
import java.util.*;
import java.io.*;
public class HighscoreManager {
// Sparar alla poäng i filen "scores.dat", filen skapas här
private static final String HIGHSCORE_FILE = "scores.dat";
// En arraylista med typen score
ArrayList<Score> scores;
// Startar en in och en utström för att skicka och ladda in information från
// filen
ObjectOutputStream outputStream = null;
ObjectInputStream inputStream = null;
public HighscoreManager() {
// För att kunna arbeta med listan behövs en variabel dvs. Arraylistan
// scores
scores = new ArrayList<Score>();
// Det är med classen Arraylist<score> getScores() som arrayen skapas
// forts
}
public ArrayList<Score> getScores() {
// ...forts-> och här används loadScoreFil() och sort(), returnerar
// värdet scores som används i HighscoreManager
loadScoreFile();
sort();
return scores;
}
private void sort() {
// Här blir det komplicerat, kort och gott så skapas "comparator", ifrån
// ScoreComparator.java, den sorterar scores med hjälp av just
// collections(från java).sort(x,y)
ScoreComparator comparator = new ScoreComparator();
Collections.sort(scores, comparator);
}
public void addScore(String name, int score) {
loadScoreFile();
scores.add(new Score(name, score));
updateScoreFile();
}
public void loadScoreFile() {
//Se updateScoreFile
try {
inputStream = new ObjectInputStream(new FileInputStream(
HIGHSCORE_FILE));
scores = (ArrayList<Score>) inputStream.readObject();
} catch (FileNotFoundException e) {
System.out.println("");
} catch (IOException e) {
System.out.println("io problem: " + e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println("cnf problem: " + e.getMessage());
} finally {
try {
if (outputStream != null) {
outputStream.flush();
outputStream.close();
}
} catch (IOException e) {
System.out.println("io problem: " + e.getMessage());
}
}
}
public void updateScoreFile() {
try {
// Med serializerade Score.java så används outputStream för att
// skicka till HIGHSCORE_FILE som är scores.dat
outputStream = new ObjectOutputStream(new FileOutputStream(
HIGHSCORE_FILE));
outputStream.writeObject(scores);
}
// resten är catch som kan göras om för att visa felmeddelanden, jag
// gjorde bara en basic.
catch (FileNotFoundException e) {
System.out.println("File Not Found, run the program again to fix.");
} catch (IOException e) {
System.out.println("IO problem, run the program again to fix.");
}
finally {
try {
if (outputStream != null) {
outputStream.flush();
outputStream.close();
// Detta displayar poängen så länge det finns något att
// displaya
}
} catch (IOException e) {
System.out
.println("Update problem, run the program again to fix.");
}
}
}
public String getHighscoreString() {
// Här skapas själva texten som ska visas, nästan slutstation för
// highscoret
// Skapar Stringen highscoreString och sätter en maxgräns för hur många
// highscores som ska vara med.
String highscoreString = "";
int max = 10;
// Sammanställer poängen
ArrayList<Score> scores;
scores = getScores();
// while loop som printar ut ett highscore i taget, när i < max så
// skrivs scores1,scores2 etc ut och plussar
// på i och processen repeteras tills i = x, då returneras värdet som är
// highscoreString och kan användas i tamain.
int i = 0;
int x = scores.size();
if (x > max) {
x = max;
}
while (i < x) {
highscoreString += (i + 1) + ".\t" + scores.get(i).getNamn() + " "
+ scores.get(i).getScore() + "\n";
i++;
}
return highscoreString;
}
}
答案 0 :(得分:0)
我为你的代码做了一个JUnit测试,并尝试将十个分数写入得分.dat文件。然后我尝试阅读scores.dat文件,分数列表包含10个分数。你的代码似乎正在运作。
你在scores.dat文件中得分超过五分吗?
我运行了以下测试:
public class HighscoreManagerTest {
@Test
public void shouldReturnTenHighscores(){
HighscoreManager highscoreManager = new HighscoreManager();
highscoreManager.addScore("Player 2", 998);
highscoreManager.addScore("Player 1", 999);
highscoreManager.addScore("Player 5", 995);
highscoreManager.addScore("Player 3", 997);
highscoreManager.addScore("Player 4", 996);
highscoreManager.addScore("Player 6", 994);
highscoreManager.addScore("Player 7", 993);
highscoreManager.addScore("Player 8", 992);
highscoreManager.addScore("Player 9", 991);
highscoreManager.addScore("Player 10", 990);
ArrayList<Score> scores = highscoreManager.getScores();
System.out.println( highscoreManager.getHighscoreString() );
Assert.assertEquals( 10 , scores.size() );
}
}