Java - 对象列表返回重复值

时间:2015-11-25 20:09:55

标签: java mysql

我正在开发一个涉及程序与MySQL数据库交互的项目,当运行查询以从数据库获取一定数量的值时,它会执行它然后将值存储为对象,最终通过他们到列表。

目前,它从数据库中获取信息没关系,通过okay传递变量,但是当我去打印该列表名称中的对象时,它返回所有相同的值(要传递的最后一个值)

如何返回存储在该列表中的所有对象值?

代码如下:

ArrayList<Game> gameDetails = new ArrayList<Game>();

while (rs.next()) {

    String gameName = rs.getString("game");
    int score = rs.getInt("score");
    int time = rs.getInt("time");


    gameDetails.add(new Game(gameName, score, time));

    System.out.println(gameName);
}
for (int i = 0; i < gameDetails.size(); i++) {

    System.out.println(gameDetails.get(i).getName());
}

游戏对象类

public class Game {

    private static String name = "";
    private static int time = 0, score = 0;

    public Game(String n, int t, int s) {
        this.name = n;
        this.time = t;
        this.score = s;
    }

    public static String getName() {
        return name;
    }

    public static int getScore() {
        return score;
    }

    public static int getTime() {
        return time;
    }

    public static void setName(String n) {
        name = n;
    }

    public static void setTime(int t) {
        time = t;
    }

    public static void setScore(int s) {
        score = s;
    }
}

目前,它在控制台中返回此值,没有getName()方法:

Game@516a3a8
Game@6c9844ae
Game@17115812

它返回

Call of Duty
Call of Duty
Call of Duty

使用getName()方法

所以看起来每个值都是唯一的,只有当我去调用getName()方法时才会这样。

非常感谢任何帮助!

谢谢!

2 个答案:

答案 0 :(得分:4)

因为您使用静态变量来保存游戏值,所以每个游戏值都使用这些变量的相同实例,因此每个游戏对象都将具有相同的值。在游戏定义中删除名称,时间和分数中的静态

答案 1 :(得分:2)

您在Game类中使用静态成员变量。当您将字段声明为private static成员(而不是private)时,这些字段将在所有Game对象实例中共享。因此每次更改字段的值时,例如name字段,值将在共享引用中更新。将字段更改为private应该有效。

 private String name = "";
 private int time = 0, score = 0;