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