簡體   English   中英

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

[英]How to return string and int type in a method?

為視頻游戲角色編寫課程。 角色應具有名稱,類型(童軍,士兵,軍醫等)和當前的健康狀況。 因此,它需要三個屬性:

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

您不能返回intString 如果要輸出消息,則必須選擇一種類型,並且應該重新考慮設計。 例如,只需在調用方法后檢查changeHealth()的返回值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;
}

謙虛,我認為您想要的不是一個好方法。 您的方法應盡可能具有語義。

更好的方法是返回一個負數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(); }
}

我認為您誤解了作業。 該方法不應返回新的健康狀況,而應更改該字符的健康狀況,即僅“就地”更新this.health並將返回的類型更改為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提出了一些很好的替代方案和補充,但鑒於這看起來像是一個賦值,我認為您應該堅持對方法的描述,即更改運行狀況並返回字符串。

無論您的角色是否死亡,總是返回同一件事會更有意義。

例如:

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

如果聲明返回int的方法,則不能使其返回字符串作為“特殊結果”。

有幾種方法可以解決您的問題。 您可以添加類似checkAlive()的方法,如果當前健康狀況大於0,則返回true;否則返回false;或者使調用方檢查返回的值(更改后的健康狀況),並在返回值時顯示字符串小於或等於0。

另外,我認為您在概念中存在一些錯誤:首先,您的方法不會改變類內部的運行狀況值; 其次,只有在將0作為參數傳遞給方法時,才會執行最后一個if(要在其中返回字符串)的代碼。 那可能不是您想要的。 按照我的建議,編輯如下方法:

public int changeHealth(int change) {
    health += change;
    return health;
}
public String changeHealth(int change) {
    health += change;
    return health < 0 ? "Your character is dead" : null;
}

一些事情,

首先,別擔心,你的角色永遠不會死

  if (change < 0){
         return health - change;
     } else if (change > 0){
         return health + change;
     }

您正在為健康增加積極的變化價值,並從中減去負面價值。 數學101 x-(-y)== x + y

第二,你的角色可能死了,但是我不認為與他死有關的任何動作都應該在“ GameCharacter”類中發生。 我建議您返回true / false值,以指示字符仍然有效。 或創建枚舉。 如果您采用這種方式,則可能會有多個狀態(有效,幾乎為零,已死)

我會重新考慮設計,尤其是圍繞changeHealth方法。 但是,如果您確實希望將int和可選字符串的返回類型組合在一起,則可以創建一個新類,例如HealthStatus ,該類實際上包含Optional<String>

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM