美好的一天!
我有一个项目(游戏)需要在明天早上出现。但是在写高分时我发现了一个错误。我正在尝试创建一个文本文件,并以分数为基础以降序编写SCORE NAME。
例如:
SCORE NAME RANK
230 God
111 Galaxian
10 Gorilla
5 Monkey
5 Monkey
5 Monkey
注意还有一个等级 我的代码如下:
public void addHighScore() throws IOException{
boolean inserted=false;
File fScores=new File("highscores.txt");
fScores.createNewFile();
BufferedReader brScores=new BufferedReader(new FileReader(fScores));
ArrayList vScores=new ArrayList();
String sScores=brScores.readLine();
while (sScores!=null){
if (Integer.parseInt(sScores.substring(0, 2).trim()) < score && inserted==false){
vScores.add(score+"\t"+player+"\t"+rank);
inserted=true;
}
vScores.add(sScores);
sScores=brScores.readLine();
}
if (inserted==false){
vScores.add(score+"\t"+player+"\t"+rank);
inserted=true;
}
brScores.close();
BufferedWriter bwScores=new BufferedWriter(new FileWriter(fScores));
for (int i=0; i<vScores.size(); i++){
bwScores.write((String)vScores.get(i), 0, ((String)vScores.get(i)).length());
bwScores.newLine();
}
bwScores.flush();
bwScores.close();
}
但如果我输入三个数字:60 Manny,文件将是这样的:
60 Manny
230 God
111 Galaxian
10 Gorilla
5 Monkey
5 Monkey
5 Monkey
问题是它只能读取2个数字,因为我使用sScores.substring(0, 2).trim())
。
我尝试将其更改为sScores.substring(0, 3).trim())
。但是因为它读到了角色部分而变成了错误。任何人都可以帮我修改我的代码,以便我可以读取最多4个数字?我们将非常感谢您的帮助。
答案 0 :(得分:3)
你应该使用的是:
String[] parts = sScrores.trim().split("\\s+", 2);
然后你将得到一个数组,其索引为0,索引为1。
int theNumber = Integer.parseInt(parts[0].trim();
String theName = parts[1].trim();
你可以像这样重写while循环:
String sScores=brScores.readLine().trim();
while (sScores!=null){
String[] parts = sScrores.trim().split(" +");
int theNumber = Integer.parseInt(parts[0].trim();
if (theNumber < score && inserted==false){
vScores.add(score+"\t"+player+"\t"+rank);
inserted=true;
}
vScores.add(sScores);
sScores=brScores.readLine();
}
就个人而言,我会添加一个新的HighScore
类来帮助解析文件。
class HighScore {
public final int score;
public final String name;
private HighScore(int scoreP, int nameP) {
score = scoreP;
name = nameP;
}
public String toString() {
return score + " " + name;
}
public static HighScore fromLine(String line) {
String[] parts = line.split(" +");
return new HighScore(Integer.parseInt(parts[0].trim()), parts[1].trim());
}
}
答案 1 :(得分:2)
每一行的格式始终相同:一个整数,后跟一个标签,后跟播放器名称。
在解析得分之前,只需找到每行中制表符的索引,并将子串从0(含)到此索引(不包括)。
玩家名称可以通过从选项卡索引+1(含)上的子字符串获取行的长度(不包括)。
答案 2 :(得分:1)
如果上述表格是文件。
对于前两个分数,它会没问题,但是对于5分,它开始阅读角色。可能是造成问题。