2010-08-14 27 views
0

抓住隨機I具有存儲52個對象像這樣一個ArrayList:從ArrayList中

public class Pack 

{ 
    private ArrayList<Card> cards; 
    private Card RandomCard; 


    public static void main(String[] args) { 
    ArrayList<Card> cards = new ArrayList<Card>(); 

    cards.add(new Card('C','A')); 
    cards.add(new Card('C','2')); 
    cards.add(new Card('C','3')); 

等。

我也有這個方法,該方法產生一個隨機數,從抓住一個隨機對象我數組列表。

public Card getRandomCard() 

{ 
    int number = (int) (Math.random() * 52.0); 
    return RandomCard; 
} 

這個編譯,但是當我測試它,我得到返回'null'。我必須包括這種方法! 有什麼建議嗎?

+0

這是sudo代碼嗎?因爲'RandomCard'肯定是空的,如果這是你的實際代碼。如果它是sudo,是否測試過以確保隨機數在數組範圍內?另外,如果你想要一個'int',你爲什麼說'52.0'? 52'不會更好嗎? – 2010-08-14 00:28:20

+0

你什麼時候分配了RandomCard? – deinst 2010-08-14 00:30:08

+0

爲什麼它肯定是空?代碼是java。我不想要一個int我想要一個卡對象被返回。我認爲int是創建一個隨機生成器alogrithm創建一個隨機數,並用它來抓取一個隨機卡對象的一部分...:S – George 2010-08-14 19:54:20

回答

4

嘗試

return cards.get(number); 

,而不是

return RandomCard; 

最後一條語句返回RandomCard變種,它不被任何分配。

4

試試這個:使用隨機

public Card getRandomCard() { 
    return cards.get((int) (Math.random() * cards.size())); 
} 

備選:

public Card getRandomCard() { 
    Random gen = new Random(); // Make this an instance variable instead. 
    return cards.get(gen.nextInt(cards.size())); 
} 

編輯:

你原來的代碼試圖在主方法來初始化卡的ArrayList (第9行),這是一個完全不同的ArrayList包中的ArrayList。這意味着包中的ArrayList(第4行)保持爲空,這就解釋了下面描述的NullPointerException。用這個代替你的代碼:

public class Pack { 

    private ArrayList<Card> cards; 
    private Random random; 

    public Pack() { 
     random = new Random(); 
     cards = new ArrayList<Card>(); 

     cards.add(new Card('C','A')); 
     cards.add(new Card('C','2')); 
     cards.add(new Card('C','3')); 
     // And so on.. 
    } 

    public Card getRandomCard() { 
     return cards.get(random.nextInt(cards.size())); 
    } 

    public static void main(String[] args) { 
     Pack pack = new Pack(); 
     Card randomCard1 = pack.getRandomCard(); // Here is your random card. 
     Card randomCard2 = pack.getRandomCard(); // Here is another random card. 
    } 
} 
+0

我嘗試了最上面的方法,並收到一個錯誤「java.lang.NullPointerException at Pack.getRandomCard(Pack.java:83) 我現在很擔心,因爲我無法弄清楚這一點基本上我有我的卡類,它有2個字符屬性來保存卡片的套裝和值。我的包類包含一個ArrayList ,它存儲所有52張卡片的細節(你可以從我的原始帖子看到)。我的問題是我似乎無法抓住從ArrayList中隨機選擇一張卡片,我必須使用我提供的方法來做這件事,隨機卡片隨後被用作我遊戲的當前目標卡片,所以隨機卡片在每個遊戲中都會發生變化 – George 2010-08-14 18:18:12

+0

您發佈的代碼有錯誤我會在上面編輯我的帖子並解釋。 – 2010-08-15 09:24:05