0
我有一個方法processInput
當它是用戶的轉向時被激活,變量prompt
讓我知道用戶在遊戲的哪個點。事件驅動的基於回合的文本遊戲,創建一個對象
所以我有一個提示「找到一個有價值的對手新聞F」。如果用戶按下「F」,我會生成一個對象,然後隨機讓用戶/對手互相攻擊。之後,當用戶再次轉向時,它會提示「按A攻擊」,但由於前一個提示(if
)創建了一個對象,編譯器不知道它是否被執行以允許我引用該對象。
在processInput
的最後一個if子句中,行player.attack(e);
,e
可能尚未初始化,因此我不知道如何解決此問題。
public class inputListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent ae) {
String inputLog = input.getText();
input.setText("");
console.append(input + "\n");
processInput(inputLog);
}
void processInput(String inputLog){
input.setEnabled(false);
Enemy e;
if(prompt.startsWith("What is your name")){
if(inputLog.isEmpty()){
player.setName("Bob");
console.append("...\nYour name therefore is Bob");
}else{
player.setName(inputLog);
console.append("Alright "+player.getName()+"...\n");
}
choosePath();
}else if(prompt.startsWith("If you wish to find a worthy opponent")){
if(inputLog.equalsIgnoreCase("f")){
e = generateEnemy();
console.setText("");
console.append(e.getClass().getSimpleName()+" Level: "+e.getLvl());
console.append("\nHP: "+e.getHP());
console.append("\n\n\n");
if(Math.random()>0.49){
userTurn("Press A to attack");
}else{
e.attack(player);
if(!player.isDead()){
userTurn("Press A to attack");
}
}
}
}else if(prompt.startsWith("Press A to attack")){
player.attack(e);
if(!player.isDead()||!e.isDead()){
e.attack(player);
userTurn("Press A to attack");
}else if(e.isDead()){
console.append("\nYou have killed "+e.getClass().getSimpleName()+"!\n\n");
choosePath();
}
}
}
}
e!= null要求我在processinput狀態的開始時敵人e = null;這將永遠把它變爲空,並摧毀我的對象。我提示用戶輸入的方式void userTurn(String prompt){console.append(this.prompt = prompt); input.setEnabled(true); input.requestFocus(); } – Higeath
檢查null不應該要求您將其設置爲null。你已經在上面聲明它,所以它被初始化爲null。 – pmcevoy12
它確實顯示了'變量e可能未被初始化' – Higeath