2014-09-26 70 views
0

試圖建立一個方法它接受一個「數字」,然後使用該號碼,它進入一個全球性的arraylist <string>並使用一系列的變化對位置「數字」的圖標到一定圖標if-else語句。配對遊戲 - setCard方法

問題是我不知道如何調用位置。如果沒有方法,我會這樣編碼;

card1.seticon(a); 

我會手動爲所有if-else語句和arraylist中的所有項目執行此操作。

我該如何讓它變成動態的,以便'卡片'之後的數字在相同的方法中不斷變化?

這是我的方法,到目前爲止&我想替代者所以用一個變量或東西是動態

public void setCards(int cardNumber) { 
     String temp = cards.get(cardNumber); 
     switch (temp) { 
      case "0": 
       card1.setIcon(a); 
       break; 
      case "1": 
       Card1.setIcon(b); 
       break; 
      case "2": 
       Card1.setIcon(c); 
       break; 
      case "3": 
       Card1.setIcon(d); 
       break; 
      case "4": 
       Card1.setIcon(e); 
       break; 
      case "5": 
       Card1.setIcon(f); 
       break; 
      case "6": 
       Card1.setIcon(g); 
       break; 
       case "7": 
       Card1.setIcon(h); 
       break; 
     } 
} 
+0

_Never_做到這一點。首先,忘記switch-case語句。使用'Map '代替或適用的任何其他形式的多態性。另外,全局變量是根源。忘記他們。在這裏,我不清楚你的意圖是什麼。雖然他們並不是真正的完全初學者,但我強烈建議你閱讀兩篇文章:** [#1](http://amzn.com/0132350882)**,** [#2](http:/ /amzn.com/1932394850)**,** [#3](http://amzn.com/0321146530)** – Powerslave 2014-09-26 13:25:19

+0

...#1書會給你很多關於如何解決你的問題的提示問題_「我如何使它動態以便...」。 考慮_「嘗試創建一個接受'數字'然後使用該數字的方法,...(!!!)將位置'數字'的圖標更改爲某個圖標'_,您可以使用'Map '然後發出'cards.get(id).setIcon(icons.get(id))',完全省略「cardNumber」部分,因爲你可能不需要它。但是,我不確定你的目標...... PS:!!!=請勿將實施細節放在您的要求中。描述要做什麼,而不是如何。 – Powerslave 2014-09-26 13:31:37

回答

0

建立Map<String, Icon>,關鍵是"0", "1"..."7", "whatever",值icon a, b, c...h..anyIcon

那麼你只是card1.setIcon(map.get(cards.get(cardNumber)))

(在上面的行中省略驗證)

1

爲所有實例創建一個繼承樹。

abstract class Card { 
    protected String icon; 

    public Card(String icon) { 
     this.icon = icon; 
    } 

    public String getIcon() { 
     return this.icon; 
    } 
} 

這裏是子類的實例:

class CardA extends Card { 
    public CardA() { 
     super("Icon A"); 
    } 
} 

做這樣的事情,與所有你的卡。之後,你可以這樣做:

List<Card> cardList = new ArrayList<Card>(); 
cardList.add(new CardA()); 
cardList.add(new CardB()); 

,並讓說你要重複它:

for(Card card : cardList) { 
    System.out.println(card.getIcon()); 
} 

,將打印:

Icon A 
Icon B 

正如你看到的,這個過程中,您可以創建並添加任何子類,而不必修改以前創建的類。

+0

爲什麼要爲所有具有相同行爲的卡創建子類?沒有'abstract'關鍵字的'Card'類似乎很合適,但如果圖標是根據某種邏輯改變的,那麼也應該引入setter方法。 – Powerslave 2014-09-26 13:57:44

+0

我認爲圖標不僅僅是區別。各種類型的卡也可能有不同的行爲(我知道作者沒有提到這一點)。通過這種方法,@sdx可以通過polimorfic方式輕鬆實現其他內容。當然,如果圖標只是不同的屬性,那麼地圖將是更好的選擇。 – Tomek 2014-09-26 15:44:29

+0

我明白了。我的假設是相反的:即使不是圖標是唯一的區別,卡之間的區別僅在數據中體現,並且它們共享相同的功能。但實際上我並不清楚OP的問題背景是什麼...... – Powerslave 2014-09-27 08:59:10