在第一个印刷语句之上我理解我创建了一个名为player的新“盒子”,我将生命值设置为50.(忽略伯特和刀)。所以健康的价值因为它在0-100之间变为50.在第二个印刷语句之上,我使用关键字“new”,然后我创建一个新的“盒子”也称为播放器并“覆盖”第一个播放器“盒子” “并尝试传递200的健康值,但200不在0-100之间,因此默认值设置为100.我试图在我的PlayerNoLeaks类中使用setter方法实现的目标是”在同一个框“所以我第一次传递的值是50所以健康= 50,然后尝试传递200但不能有0-100的值,所以值仍然是50.如果我在PlayerNoLeaks中取出默认值100然后0的值打印,所以我打赌我在主类中再次使用“new”关键字有问题。
希望这是有道理的。
谢谢!
public class Main {
public static void main(String[] args) {
PlayerNoLeaks player = new PlayerNoLeaks("Bert", 50, "Knife");
System.out.println("Initial health is " + player.getHealth()); //prints 50
player = new PlayerNoLeaks("Alma", 200, "Sword"); //prints 100
System.out.println(player.getHealth());
}
}
public class PlayerNoLeaks {
private String name;
private int health = 100; //default value
private String weapon;
public PlayerNoLeaks(String name, int health, String weapon) {
this.name = name;
if(health > 0 && health <= 100) {
this.health = health;
}
this.weapon = weapon;
}
public void loseHealth(int damage) {
this.health -= damage;
if(this.health <= 0) {
System.out.println("Player knocked out!");
}
}
public int getHealth() {
return health;
}
}
答案 0 :(得分:2)
您可以使用Java Reflection API执行此操作。有关代码示例,请参阅http://tutorials.jenkov.com/java-reflection/fields.html#getset
如果它是私有的,您可能必须设置 field.setAccessible(true)。
答案 1 :(得分:0)
当您在同一个对象上再次调用new时,它会删除旧的“playerNoLeaks”并替换它。这就像你从未创造过它。你需要使用setter来做你想做的事。
答案 2 :(得分:0)
下面是两个不同的PlayerNoLeaks
对象实例。它们不具有相同的健康值。
new PlayerNoLeaks("Bert", 50, "Knife"); //First Player called Bert
new PlayerNoLeaks("Alma", 200, "Sword"); //Second Player called Alma
你不能指望Alma根据Bert反映他的健康状况。
你真的想学习和解决这个问题是什么?
在哪种用户情况下,您希望Alma玩家反映Bert的健康状况?
让我们知道您真正想要实现的目标,以便我们为您提供更好的答案。