Это происходит потому, что внутри while
l oop вы не проверяете, что номер замены не , а также уже в ArrayList
. Он просто принимается без вопросов.
Лучшее решение - проверить, действителен ли номер перед тем, как вы его добавите:
for (int i = 0; i < 5; i++)
{
generate = rand.nextInt((5) + 1);
while (randomNumbers.contains(generate))
{
generate = rand.nextInt((5) + 1);
}
randomNumbers.add(generate);
}
Обратите внимание, что есть более эффективные алгоритмы для этой задачи. Во-первых, проверка членства выполняется быстрее с помощью HashSet
. С другой стороны, если вы просто хотите, чтобы сгенерировать случайную перестановку чисел от 1 до N, шаффл Fisher-Yates является бесспорным лучшим решением. Для чего-то такого крошечного, как 5 цифр, это, вероятно, не имеет значения.