2017-01-22 32 views
0

我在Java中製作了一個textadventure,我嘗試製作一個「任務板」。在那裏你可以看到可用的任務,但我不知道如何在其他類中使用變量調用方法。我想是這樣的:根據輸入參數調用不同類的方法

int quest[] = new int[20]; 
int i = 0; // running variable 

if (quest1Done == false) { 
    quest[i] = 1; 
} 
switch (br.readLine()) { 
    case "1": Quest+quest[0]+.run(); //this should run the method run() in the class Quest + variable (in that case 1) 
} 

所有的類名被稱爲「任務」 +一個數字。

+0

我正在使用java編程 –

+0

您可能需要退後一步並略讀一些Java教程。如果你有一個'Quest'的實例,並且'run()'帶有一個參數,那麼它就是'theQuest.run'(quest [0])'。如果沒有,那麼你需要提供你正在運行的方法的細節。 –

+0

@RedBaron你可以使用反射或利用多態性來實現這一點。 – CKing

回答

1

您可以通過定義稱爲QuestRunner的界面開始,並確保您的所有Quest類實現這個接口和run方法:

public interface QuestRunner { 
    public void run(); 
} 

你現在有2個選擇動態調用的方法基於本線在該文件中:

1.反射

創建您基於創建的對象的方法類的全名:

public void runQuest(String className) { 
    try { 
      Class classDefinition = Class.forName(className); 
      Object obj = classDefinition.newInstance(); 
      if(obj instanceof QuestRunner) { ((QuestRunner)obj).run(); 
     } catch (InstantiationException e) { 
      System.out.println(e); 
     } catch (IllegalAccessException e) { 
      System.out.println(e); 
     } catch (ClassNotFoundException e) { 
      System.out.println(e); 
     } 

    } 

2.運行時多態性

您可以返回一個適當的QuestRunner實現給定的行號的方法:

public static QuestRunner createQuestRunner(String lineNum) { 
    QuestRunner questRunner = null; 
    if(lineNumber.equals("1")) { questRunner = new Quest1() } 
    else if(lineNumber.equals("2")) { ..... } 
    return questRunner; 
} 

你可以那麼只需將lineNumber傳遞給此方法並調用run方法即可:

QuestRunner questRunner = createQuestRunner(br.readLine()); 
questRunner.run(); 

注意:如果您使用上述解決方案,則不再需要開關盒。

+0

我找到了一個類似的解決方案,但感謝您的努力:) –

+0

@RedBaron這很棒。在這種情況下,我相信我的回答是正確的,所以請接受它,並且讓其他用戶知道這是解決方案。我們不提供謝謝你的答案:) – CKing

0

我的建議是想想你的代碼的結構。你試圖做的是不正確的。你試圖完成的任選版本是:

  • 你有你正在嘗試構建的遊戲的實例。
  • 您存儲。 您在ArrayList中的任務已完成您的任務
  • 您在遊戲中擁有一個「運行」方法。 實例獲取作爲您想要 任務的參數ID運行並執行它。

在那個例子中,你可以做到以下幾點:

Game mGame = new Game(Quest a, Quest b, Quest c); // In the game constructor you add these quests to your ArrayList 
mGame.run(1); // runs quest with id = 1 

這就是你如何實現你從你的程序來實現的功能只是超級基本思路。

相關問題