2010-08-14 6 views
0

У меня есть ArrayList, который хранит 52 объектов карты следующим образом:Grabbing случайным образом из 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')); 

и т.д ..

У меня также есть этот метод, который генерирует случайное число, чтобы захватить случайный объект из моего ArrayList.

public Card getRandomCard() 

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

Это скомпилируется, но когда я проверяю его, я получаю «null». Я должен включить этот метод! Любые предложения?

+0

Это код sudo? Потому что 'RandomCard' определенно null, если это ваш фактический код. Если это sudo, вы проверили, чтобы случайное число находилось в пределах диапазона массивов? Кроме того, если вы хотите 'int', почему вы говорите' 52.0'? Разве «52» не будет лучше? –

+0

Когда вы назначаете RandomCard? – deinst

+0

Почему это определенно null? код java. Я не хочу int, я хочу, чтобы объект карты был возвращен. Я понял, что int был частью создания произвольного генератора alogrithm для создания случайного числа и использовать его для захвата случайного объекта карты ...: S – George

ответ

4

попробовать

return cards.get(number); 

вместо

return RandomCard; 

Последнее утверждение возвращает RandomCard вар, который не назначен в любом месте.

4

Попробуйте это:

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

Альтернатива использованием Random:

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

Edit:

Ваш исходный код пытается инициализировать ArrayList карт в основной метод (строка 9), который является совершенно другим ArrayList от вас r ArrayList в пакете. Это означает, что ArrayList in Pack (строка 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

Я пробовал метод top и получаю сообщение об ошибке «java.lang.NullPointerException в Pack.getRandomCard (Pack.java:83) Я сейчас беспокоюсь, так как не могу понять это. В принципе у меня есть класс карты , у этого есть 2 атрибута char, чтобы удержать костюм и ценность Карты. Мой класс пакета содержит ArrayList , в котором хранятся данные обо всех 52 карточках (вы можете видеть из моего оригинального сообщения). Моя проблема заключается в том, что я не могу захватить случайную карту из ArrayList, и я должен сделать это, используя метод, который мне был предоставлен. Случайная карта затем используется как текущая целевая карта для моей игры. Таким образом, случайная карта изменяется в каждой игре. – George

+0

Код, который вы опубликовали, имеет ошибку в нем Я отредактирую свой пост выше и объясню. –

Смежные вопросы