Я новичок в 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
Спасибо заранее.
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");
Два вопроса, которые я вижу:
ArrayList
который может содержать ссылку на 52 экземпляра класса FullDeck
, но вы ничего не добавляете к нему. Вам нужно сделать что-то вроде randCard.add(new FullDeck())
52 раза/в цикле **. Тогда, вероятно, вы захотите "перетасовать" колоду, посмотрите на этот вопрос, как это сделать.FullDeck
на самом деле кажется, что его следует переименовать только в Card
, а переменную randCard
следует переименовать в нечто вроде fullDeck
... после того, как вы добавили 52 карты.** EDIT: на самом деле, создание колоды карт будет сложнее, чтобы убедиться, что у вас нет дубликатов карт.
new ArrayList <FullDeck> (52);
просто создает пространство, оно не наполняет его ничем.