我从MySQL的一个表开始,这个表填充了记分牌的玩家数据。它有4个不同名称和分数的条目。我的代码成功检索了这些条目。我在使用此方法检索条目时对此进行了测试:
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int score = resultSet.getInt("score");
int lastScore = resultSet.getInt("lastScore");
System.out.println("" + Integer.toString(id) + ", " + name + ", $" + Integer.toString(score) + ".");
Scoreboard.addScore(id, name, score);
println()
返回以下四行:
1, Sam, $10000.
2, Jesus, $12000.
3, Michael, $9000.
4, Asako, $4500.
addScore()
看起来像这样:
public static void addScore(int id, String name, int score){//Adds new score to scores LinkedList
if (scores.isEmpty())
scores.addFirst(new Player(id, name, score, 0));
for (int i = 0; i < scores.size(); i++){
if (score > scores.get(i).getScore()){
scores.add(i, new Player(id, name, score, 0));
return;
}
}
scores.addLast(new Player(id, name, score, 0));
}
最后,Player类看起来像这样:
public class Player {
private static int id;
private static String name;
private static int score;
private static int lastPosition;
public Player(int id, String name, int score, int lastPosition){
setID(id);
setName(name);
setScore(score);
setLastPosition(lastPosition);
}
//...
当我最终显示分数时,它会显示:
我的代码是否有任何问题可能导致此问题?此外,您认为有哪些代码可以帮助您更好地评估此问题?我试图将所有重要的代码放入。
在检索记分板时,我使用此代码scores.get(i).setLastPosition(i+1);
这是正确的语法吗?我可以通过调用get来设置LinkedList中元素的一部分值,还是这不可能?
答案 0 :(得分:3)
您的类Player
定义了4个static
变量,这意味着无论您创建了多少Player
个实例,它们都会为整个类定义一次。每个新实例都会覆盖这些值,最后一个实例会覆盖Asako $4500
,“获胜”。
从static
中的4个变量中删除Player
,以便它们为Player
类的每个实例都有一个值。