如何在方法中返回字符串和int类型?

时间:2015-03-09 15:52:56

标签: java

  

为视频游戏角色写一堂课。角色应该有一个   名字,类型(侦察兵,士兵,军医等)和当前的健康状况。   因此它需要三个属性:

     

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);
    }
}

8 个答案:

答案 0 :(得分:2)

您无法返回intString。如果要输出消息,则必须选择一种类型,然后重新考虑设计。例如。调用方法后,只需检查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);