为视频游戏角色写一堂课。角色应该有一个 名字,类型(侦察兵,士兵,军医等)和当前的健康状况。 因此它需要三个属性:
String name, String type, int health
此类应具有以下方法:
GameCharacter( String newName, String newType, newCurHealth )
需要三个输入的构造函数。
changeHealth( int change )
一种改变健康状况的方法 字符。角色的健康状况会随着变化量的变化而变化 如果变化是负面的话会下降,如果变化是肯定的话会上升。如果 健康低于0,changeHealth应该返回字符串“你的 人物死了“。
到目前为止,这是我的代码。有什么办法可以让它变得更好吗? &安培;在第二种方法中返回字符串的方法吗?
public class GameCharacter {
private String name;
private String type;
private int health;
public GameCharacter(String newName, String newType, int newCurHealth){
name = newName;
type = newType;
health = newCurHealth;
}
public int changeHealth (int change){
if (change < 0){
return health - change;
} else if (change > 0){
return health + change;
} else if (health < 1){
// string that character is dead
}
}
public static void main(String[] args){
GameCharacter Mario = new GameCharacter ("Mario", "Hero", 100);
GameCharacter Luigi = new GameCharacter ("Luigi", "Sidekick", 100);
GameCharacter Bowser = new GameCharacter ("Bowser", "Villian", 100);
}
}
答案 0 :(得分:2)
您无法返回int
或String
。如果要输出消息,则必须选择一种类型,然后重新考虑设计。例如。调用方法后,只需检查changeHealth()
的返回值。
或者您可以定义自定义异常(或使用现有异常)。只是为了让你开始:
public int changeHealth(int change) {
int result = health;
if (health < 1) {
throw new IllegalStateException("Cannot change health, character is dead already.");
}
// Calculate health change (if any)
health += change;
// Return new health
return health;
}
答案 1 :(得分:1)
谦卑地说,我认为你想要的不是一个好方法。 你的方法应该尽可能的语义。
更好的方法是返回一个负的int,你的类GameCharacter可以有一个方法isDead或isAlive,它会给你这个状态。
public class GameCharacter {
private String name;
private String type;
private int health;
public boolean isAlive(){ return health>0; }
public boolean isDead(){ !isAlive(); }
}
答案 2 :(得分:1)
我认为你误解了这项任务。该方法不应该返回新的健康状况,而是更改该角色的健康状况,即只需更新this.health
&#34;&#34; ;并将返回的类型更改为String
。
此外,无需检查change
是正面还是负面;只需将其添加到health
!
public String changeHealth (int change) {
this.health += change
if (health < 1) {
return "Your character is dead";
} else {
return null; // or whatever
}
}
编辑:虽然其他答案提出了Character
API的一些好的替代方案和补充,但鉴于这看起来像是一项任务,我认为你应该坚持使用该方法的描述,即更改健康状况,返回字符串。
答案 3 :(得分:1)
无论你的角色是否死亡,总是返回相同的东西会更有意义。
例如:
public class GameCharacter {
private String name;
private String type;
private int health;
public GameCharacter(String newName, String newType, int newCurHealth){
name = newName;
type = newType;
health = newCurHealth;
}
public String changeHealth (int change){
// Adding positive number will increase health.
// Adding negative number will decrease health.
health += change;
if (health > 0){
return "Your character now has " + health + " health.";
} else {
return "Your character is dead.";
}
}
public static void main(String[] args){
GameCharacter Mario = new GameCharacter ("Mario", "Hero", 100);
GameCharacter Luigi = new GameCharacter ("Luigi", "Sidekick", 100);
GameCharacter Bowser = new GameCharacter ("Bowser", "Villain", 100);
}
}
答案 4 :(得分:1)
如果声明一个返回int的方法,则无法使String返回“特殊结果”。
有几种方法可以解决您的问题。您可以添加像checkAlive()
这样的方法,如果当前运行状况大于0则返回true,否则返回false,或者让调用者检查返回的值(更改后应该是健康状况)并打印字符串值小于或等于0.
另外我认为你的概念中有一些错误:首先,你的方法不会改变你班级的健康价值;第二,只有在将0作为参数传递给方法时,才会执行最后一个if中要返回字符串的代码。这可能不是你想要的。要按照我的建议编辑这样的方法:
public int changeHealth(int change) {
health += change;
return health;
}
答案 5 :(得分:0)
public String changeHealth(int change) {
health += change;
return health < 0 ? "Your character is dead" : null;
}
答案 6 :(得分:0)
很少,
首先,不要担心,你的角色永远不会死亡
if (change < 0){
return health - change;
} else if (change > 0){
return health + change;
}
您正在为健康添加正变化值并从中减去负值。数学101 x - (-y)== x + y
第二,你的角色可能已经死了,但我不认为任何与他有关的行为应该发生在'GameCharacter'类中。我建议你返回真/假值,表明角色还活着。或创建枚举。如果你这样走,你就会有多个状态(活着,几乎死了,死了)
答案 7 :(得分:0)
我会重新考虑设计,尤其是changeHealth
方法。但是,如果您确实希望使用int
和可选字符串的组合返回类型,则可以创建一个新类,例如HealthStatus
,它实际上包含Optional<String>
:< / p>
public class HealthStatus {
public final int health;
public final Optional<String> message;
public HealthStatus(int health, String message) {
this.health = health;
this.message = Optional.of(message);
}
public HealthStatus(int health) {
this.health = health;
this.message = Optional.empty();
}
public int getHealth() {
return health;
}
public Optional<String> getMessage() {
return message;
}
}
然后,在您的changeHealth
方法中,您可以选择返回消息:
public HealthStatus changeHealth(int change) {
health += change;
if (health < 1) {
return new HealthStatus(health, "Your character is dead");
} else {
return new HealthStatus(health);
}
}
在您调用它的时候,您可以打印消息,如果有消息(或做任何其他合适的消息):
// take 7 points of damage:
HealthStatus status = changeHealth(-7);
hitPoints = status.getHealth();
// print the message, if there is one
status.getMessage().ifPresent(System.out::println);