0

我从 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);
    }
//...

当我终于开始显示分数时,它会显示:

  1. 麻子 $4500
  2. 麻子 $4500
  3. 麻子 $4500
  4. 麻子 $4500

我的代码有什么问题可能导致这种情况吗?此外,您认为是否有任何代码可以更好地帮助您评估这个问题?我试图把所有重要的代码都放进去。


在检索记分牌时,我使用此代码scores.get(i).setLastPosition(i+1);

这是正确的语法吗?我可以通过调用 get 来设置 LinkedList 中部分元素的值,还是这不可能?

4

1 回答 1

3

您的类Player定义了 4 个static变量,这意味着它们为整个类定义一次,无论Player您创建了多少实例。每个新实例都会覆盖这些值,最后一个实例Asako $4500“获胜”。

static从 中的 4 个变量中删除Player,以便它们对Player类的每个实例都有一个值。

于 2013-05-15T00:09:54.370 回答