Вам нужно где-то хранить, был ли выбран конкретный шар.
После того, как вы выбрали шар, если он был выбран ранее, вернитесь к началу функции и попробуйте снова.
Обратите внимание, что это, вероятно, не лучший способ справиться с этим - как только вы дойдете до того места, где в массиве есть только несколько невыбранных шаров, вы потратите много времени на перебор пока вы не получите новый. Лучшим способом было бы сохранить список еще не выбранных шаров и вырезать их из списка по мере их выбора.
РЕДАКТИРОВАТЬ: psuedocode-версия метода цикла, пока мы не нашли его. Вам нужно будет реализовать getIt () и Foo :: hasNotBeenPickedYet (), а также перевести его в реальный код.
Foo foo = null;
while(!foo) {
Foo temp = getIt();
if(temp.hasNotBeenPickedYet())
foo = temp;
}
return foo;