На самом деле, поскольку ваш домен ограничен целыми числами от 1 до 49, лучше использовать массив логических значений, чтобы указать, было ли уже нарисовано число:
public void populateArray()
{
count = 0;
boolean[] used = new boolean[50];
while (count < 6) {
randomNumber = 1 + randomGen.nextInt(49);
if (!used[randomNumber]) ++count;
used[randomNumber] = true;
}
int j = 0;
for (int i = 1; i < used.length; ++i) {
numberLine[j++] = i;
}
}
edit
Это все еще имеет потенциальный бесконечный цикл.
Вы рисуете 6 чисел из 49 без дубликатов.Правильное решение будет таким:
public void populateArray() {
List<Integer> pool = new ArrayList<Integer>();
for (int i = 0; i < 49; ++i) {
pool.add(i + 1);
}
for (int i = 0; i < 6; ++i) {
randomNumber = randomGen.nextInt(pool.size());
numberLine[i] = pool.get(randomNumber);
pool.remove(randomNumber);
}
Arrays.sort(numberLine);
}
Конечные циклы, такое же распределение вероятностей, как и у исходного.Вместо повторного рисования при обнаружении дубликата, вы просто исключаете возможность рисования дубликата заранее.По сути, он подражает настоящей лотерее.