После прохождения всей колоды карты исчезают.Где в моем for цикл (ы) или arraylist (s) должны измениться, чтобы они не исчезли? - PullRequest
0 голосов
/ 26 марта 2019

После прохождения игры (52 хода) карты исчезают. Тем не менее, код, который запускает игру, все еще работает, но я просто не вижу вытянутых карт.

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

ArrayList<Cards> cards = new ArrayList<Cards>();
ArrayList<Deck1> deck1 = new ArrayList<Deck1>();
ArrayList<Deck2> deck2 = new ArrayList<Deck2>();
ArrayList<Play> play = new ArrayList<Play>(); // the cards played

// случайное деление карт на две колоды

    for (int i = 0; i < 52; i++) {
        int j = (int) (Math.random() * (51 - i) + 0);
        if (i % 2 == 0) {
            deck1.add(new Deck1(cards.get(j).getFile(), cards.get(j).getPV()));
            cards.remove(j);
            f.add(deck1.get(b).getIcon());
            b++;
        } else if (i % 2 == 1) {
            deck2.add(new Deck2(cards.get(j).getFile(), cards.get(j).getPV()));
            cards.remove(j);
            f.add(deck2.get(a).getIcon());
            a++;
        }
    }

Я хочу, чтобы игра работала, и чтобы все карты отображались до тех пор, пока игра не завершится. Спасибо!

1 Ответ

0 голосов
/ 26 марта 2019
int j = (int) (Math.random() * (51 - i) + 0);

Проблема в том, что Math.random() генерирует число в диапазоне от 0 (включительно) до 1 (эксклюзивно), поэтому j <= 50 - i означает, что вы никогда не выберете последнюю карту в колоде.

Измените 51 на 52.

Или, проще:

int j = (int) (Math.random() * cards.size());

Или реже:

Cards card = cards.remove((int) (Math.random() * cards.size()));

Теперь просто используйте card вместо повторения cards.get(j) и cards.remove(j).

(и обратите внимание, что ваш класс Cards должен называться Card, вероятно).

Или еще раз:

Collections.shuffle(cards);
deck1.addAll(cards.subList(0, cards.size() / 2));
deck2.addAll(cards.subList(cards.size() / 2, cards.size()));

(хотя тогда вам придется как-то чередовать карты в f).

...