【发布时间】:2023-04-05 14:43:01
【问题描述】:
所以我在学校的最后一个项目有问题。我正在创建一个带有高分列表的游戏,但我需要有 10 个人出现,而我目前只有 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;
}
}
【问题讨论】:
-
您的代码中哪里有前 5 个分数?获得前 N 个分数的简单算法:获取前 N 个分数,对它们进行排序。取下一个分数,如果它大于最小的分数,则删除最小的分数并将新分数插入到正确的位置。并循环到最后。
标签: java arrays class arraylist