Java - War Game - Получение объекта из массива

1

Я новичок в Java, и у меня возникают проблемы, обертывающие мой разум вокруг одной из концепций.

В настоящее время я занимаюсь карточной игрой "Война". Текущие инструкции для меня удалить случайную карту из колоды карт.

Я создал массив, но это массив класса Card. Класс создает карту, в основном добавляя int и строку вместе. Затем я создал массив из этого класса. На мой взгляд, у меня нет ни int, ни String в моем массиве, это правильно?

Теперь мне нужно удалить одну из случайных карт из колоды и передать ее игроку. Здесь я теряюсь. Я думаю, что я могу просто использовать Random, чтобы удалить случайную карту, но я всегда получаю сообщение об ошибке.

Я не прошу вас выполнить задание для меня, но если вы захотите указать мне в правильном направлении и, возможно, исправить меня, если я смущен.

Текущий класс, над которым я работаю:

import java.util.Random;
import java.util.*;

public class War3
{

    Random ran = new Random();

    public FullDeck randomCard()
    {
        ArrayList <FullDeck> randCard = new ArrayList <FullDeck> (52);

        int index = ran.nextInt(randCard.size());
        FullDeck x = randCard.remove(index);
        return x;
    }

    public void display()
    {
         System.out.println("Your card is" + randomCard());

    }
}

Весь проект для разъяснения Java - War Game - Gist

Спасибо заранее.

  • 0
    Какую ошибку вы получаете?
  • 0
    На самом деле вы еще не добавили ни одной карты в колоду. Конструктор new ArrayList <FullDeck> (52); просто создает пространство, оно не наполняет его ничем.
Показать ещё 2 комментария
Теги:
arrays
arraylist

2 ответа

0
Лучший ответ

ArrayList <FullDeck> randCard = new ArrayList <FullDeck> (52);

Это создает ArrayList. Вам не нужно указывать число 52, так как ArrayList динамически растет, в отличие от Array s. Вызов похож на ArrayList <FullDeck> randCard = new ArrayList <FullDeck>(); , разница заключается в том, что используемый вами конструктор устанавливает начальную емкость ArrayList 52. Это никоим образом не ограничивает размер ArrayList.

Во всяком случае, вы создаете новый пустой ArrayList. Затем вы хотите size, но поскольку вы ничего не вносили в список, он по-прежнему пуст, до нулевого размера. Затем вы пытаетесь вызвать ran.nextInt(0)... nextInt(int n) ожидает число больше нуля. Из javadoc:

public int nextInt(int n) {
 if (n <= 0)
  throw new IllegalArgumentException("n must be positive");
  • 0
    Но, если ОП знает , сколько карт у него есть (52), это хорошая практика , чтобы использовать это в качестве начальной емкости. Поэтому говорить, что ему «не нужно указывать число 52», технически правильно, но это имеет свои преимущества.
  • 0
    Да, я начинаю видеть это сейчас. Я думал, что <FullDeck> вернется к массиву в FullDeck.java. Позвольте мне переделать это и попробовать еще раз. Спасибо.
Показать ещё 9 комментариев
0

Два вопроса, которые я вижу:

  1. Вы создаете ArrayList который может содержать ссылку на 52 экземпляра класса FullDeck, но вы ничего не добавляете к нему. Вам нужно сделать что-то вроде randCard.add(new FullDeck()) 52 раза/в цикле **. Тогда, вероятно, вы захотите "перетасовать" колоду, посмотрите на этот вопрос, как это сделать.
  2. Вы называете немного странным... класс FullDeck на самом деле кажется, что его следует переименовать только в Card, а переменную randCard следует переименовать в нечто вроде fullDeck... после того, как вы добавили 52 карты.

** EDIT: на самом деле, создание колоды карт будет сложнее, чтобы убедиться, что у вас нет дубликатов карт.

  • 0
    1. Если я правильно понимаю, в FullDeck уже должно быть 52 карты. Разве ArrayList не «вытягивает» эту информацию из FullDeck.java? 2. Я думаю, что моя собственная путаница может вызвать проблемы с именами, которые я использую.
  • 0
    Нет, вы создаете массив определенного размера и типа, но на самом деле ничего не помещаете в него.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню