2011-02-03 102 views
0

我有一個問題,我的腳本數組對象

我有返回卡的方法,另一種返回的名稱,另一個價值和另一西裝

public Card pickRandomCard() { 
     while (rand < 6) { 
     System.out.println(deckOfCards.get(rand)); 
     int cardValuePlayer1 = (deckOfCards.get(rand).toInt()); 
     currentTotal1 = cardValuePlayer1; 
     String name1 = (deckOfCards.get(rand).toString()); 
     nameF = name1; 
     String suit_1 = (deckOfCards.get(rand).suit()); 
     suit1 = suit_1; 
     return deckOfCards.get(rand++); 
    } 
     return null; 

    } 

    public int totalValuePlayer1() { 
     return currentTotal1; 
    } 

    public String name1() { 
     return nameF; 
    } 

    public String suit_1() { 
     return suit1; 
    } 

,但現在,我想創建卡的ArrayList,像紙牌做的手,讓我IDEIA是創建5卡的ArrayList,但如果我不喜歡的東西

List<Card> hand = new ArrayList<Card>(); 
    Iterator<Card> iter = hand.iterator(); 

    while (iter.hasNext()) { 
     hand.add(gr.pickRandomCard()); 
    } 

我在線程收到異常「主要」 java.lang.IndexOutOfBoundsExceptio我有這個代碼在另一個類中調用每個方法,套裝,卡的值,圖像,但我需要創建一個列表比較卡,並與下面的代碼,它是不可能通過一個

ActionListener one = new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      if (gr1.getCounter1() < 5) { 
       gr1.setCounter1(gr1.getCounter1() + 1); 
       test1.setIcon(play1a); 
       pn1.setText(Integer.toString(play2a)); 
       pn5.setText(play3a); 
       pn50.setText(play4a); 
      } else { 
       pn5.setText("No more cards"); 
      } 
     } 
    }; 

    arraybtn[1].addActionListener(one); 
    arraybtn[1].setPreferredSize(new Dimension(120, 20)); 

    play1a = gr.pickRandomCard().getImage(); 
    play2a = gr.totalValuePlayer1(); 
    play3a = gr.name1(); 
    play4a = gr.suit_1(); 

    arraybtn[1].setText(play3a);//change the name of button 

比較卡一個,我認爲問題是,我需要創建4個列表,分別用於通訊員方法(西裝,形象,價值),但我沒有任何想法我怎麼能做到這一點

感謝

回答

2

在你的代碼中有一個缺陷:

// this iterates over existing cards 
Iterator<Card> iter = hand.iterator(); 

// but there are no cards yet 
while (iter.hasNext() /* this will never return true */) { 
    // so this is never executed 
    hand.add(gr.pickRandomCard()); 
} 

試試這個:

List<Card> hand = new ArrayList<Card>(); 
for(int i = 0; i < 5; i++){ 
    hand.add(gr.pickRandomCard()); 
} 
+0

解決了,謝謝肖恩, – anvd 2011-02-03 15:56:57

2
List<Card> hand = new ArrayList<Card>(); 
Iterator<Card> iter = hand.iterator(); 

while (iter.hasNext()) { 
    hand.add(gr.pickRandomCard()); 
} 

你的 「手」 是空的,所以你沒有的元素。這就是爲什麼你的尺寸是0;

你也可以創建一個新的類,比如說Playa,它有名字,西裝,圖片,價值屬性。

+0

你可能是指`玩家`。 「Playa」會擁有像沙子,海洋,棕櫚樹等屬性:-) – 2011-02-03 15:40:57

+0

@Sean不會成爲一個Playa-Hater;) – Alb 2011-02-03 18:29:44

0

建立在肖恩的答案上,你無法迭代你的hand ArrayList的原因是因爲它沒有任何項目。所以你需要使用for循環來添加它們。

1
while (iter.hasNext()) { 
     hand.add(gr.pickRandomCard()); 
    } 

iter來自您剛剛創建的空列表,因此hasNext()將始終返回false;

你提到了西裝和手等概念,但已經決定他們應該是ArrayLists。你爲什麼不創建西裝和手類。手中可能會包含一些卡片集合以及填充它的建築師或方法。西裝應該是一個枚舉類似

enum Suit{ 
    CLUBS, 
    SPADES, 
    HEARTS, 
    DIAMONDS 
} 

如果您以OO方式正確地建模數據,您會發現代碼更容易編寫。