为了账号安全,请及时绑定邮箱和手机立即绑定

Java多个对象返回相同的信息

Java多个对象返回相同的信息

紫衣仙女 2023-06-21 15:35:15
我正在尝试编写一个系统来确定电子游戏的武器类型和武器的伤害。我正在尝试实例化两种具有不同统计数据的武器,但是当我使用该方法时getType();,它们返回相同的东西。我尝试使用 ArrayList,但从诸如此类的东西中获取了武器的类型(arraylist name here).get(0).getType();并且(arraylist name here).get(1).getType();仍然返回"AK-47"。ArrayList<Weapon> weapons = new ArrayList<Weapon>();        Weapon weapon = new Weapon("Desert Eagle", 5);        Weapon weapon2 = new Weapon("AK-47", 3);        weapons.add(weapon);        weapons.add(weapon2);        System.out.println(weapon.getType());        System.out.println(weapon2.getType());方法:public class Weapon {    static String type;    static int damage;    public Weapon(String type, int damage) {        Weapon.type = type;        Weapon.damage = damage;    }    public static String getType() {        return type;    }}我要weapon.getType();回去"Desert Eagle"再weapon2.getType();回去"AK-47"。我知道这应该是一个简单的答案,但我可能只是为自己把这个问题复杂化了哈哈。任何帮助表示赞赏,谢谢!
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

static从type和damage中删除Weapon。static意味着全局类的一个值,而不是每个类实例一个值(这是你想要的)。this.type = type;另外,this.damage = damage;在构造函数中。


public class Weapon {

    private String type;

    private int damage;


    public Weapon(String type, int damage) {

        this.type = type;

        this.damage = damage;

    }


    public String getType() {

        return type;

    }

}

此外,您目前没有使用您的任何值List(您保留了您创建的引用,并通过这些引用进行调用)。并且更喜欢编程而List不是ArrayList类型接口(你可以使用菱形运算符<>)。喜欢,


List<Weapon> weapons = new ArrayList<>();

weapons.add(new Weapon("Desert Eagle", 5));

weapons.add(new Weapon("AK-47", 3));

for (Weapon w : weapons) {

    System.out.println(w.getType());

}

产出


Desert Eagle

AK-47


查看完整回答
反对 回复 2023-06-21
?
aluckdog

TA贡献1847条经验 获得超7个赞

删除static关键字,因为它使字段在该类的每个实例之间共享

static String type;
static int damage;


查看完整回答
反对 回复 2023-06-21
?
繁花如伊

TA贡献2012条经验 获得超12个赞

是因为你的类型是static的 改成private String类型;



查看完整回答
反对 回复 2023-06-21
  • 3 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信