2015-06-03 3 views
-7

Я участвую в программировании карточной игры, и я использую цикл for для имитации рисования карты. Моя «колода» - это связанный список с «карточными» узлами. Каждый «карточный» узел имеет логическую переменную, которая называется «используется», чтобы указать, больше ли карта в колоде. Я хочу, чтобы мой цикл повторялся, пока он не достигнет случайной карты, и если случайная карта уже удалена из колоды, снова запустите цикл for (потому что он будет генерировать другое случайное число). Это возможно?Метод для включения цикла для перезапуска цикла

for(int i = 0; i < randomNumber.nextInt(deck.numberCards); i++){ 
    etc... 
} 

P.S. Я понимаю, что очевидное решение будет фактически удалить узел из списка, но мне интересно, если есть способ сделать это

+1

Вам необходимо добавить код к вашему вопросу. Неясно, о чем вы нас спрашиваете. –

+0

Почему вы зацикливаете, если знаете индекс карты? –

+2

@EvanKnowles 'Моя« колода »- это связанный список с« карточными »узлами - нет случайного доступа. Реальный вопрос - почему бы не использовать ArrayList. – Eran

ответ

0

Вы можете использовать

Card card = null; 
do{ 
    card = deck.get(randomNumber.nextInt(deck.numberCards)); 
} while(!card.used); 

Предполагая, что deck список содержит экземпляры Card класс.

0
Card picked = null; 
while(picked = null) { /* keep itterating */ } 

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

Вы лучше фильтруете использованные карты и выбираете из результирующего списка.

List<Card> unusedCards = deck.stream() 
    .filter(c -> !c.used).collect(Collectors.toList()); 
Смежные вопросы