Вот один из способов сделать все то, что вы упомянули:
private static boolean arrayContainsInt(int array[], int val, int x) {
for(int i = 0; i < x; i++) {
if(array[i] == val) {
return true;
}
}
return false;
}
public static int[] randomNumbers(int count, int minInclusive, int maxNonInclusive) {
int randoms[] = new int[count];
Random rand = new Random();
int impossibleValue = minInclusive - 1;
for(int i = 0; i < randoms.length; i++) {
randoms[i] = impossibleValue;
}
for(int x = 0; x < count; x++) {
int thisTry = impossibleValue;
while(thisTry == impossibleValue || arrayContainsInt(randoms, thisTry, x)) {
thisTry = (int)(rand.nextFloat() * (float)(maxNonInclusive - minInclusive)) + minInclusive;
}
randoms[x] = thisTry;
}
return randoms;
}
Если вы задаетесь вопросом о скорости, здесь это некоторая статистика:
randomNumbers(1000, 0, 10000)
==> 16 миллисекунд
(1000 случайных чисел. от 0-> 10000 без каких-либо повторов)
randomNumbers(10000, 0, 10000)
==> 207 мс
(Каждое число от 0-> 10000 генерируется в случайном порядке)
Метод randomNumbers
подается число случайных чисел для генерации, минимального значения (включительно) и максимального значения (не включительно) и возвращает массив рандомов с учетом поставленных параметров.
Примечание: если предоставленный параметр count
больше, чем значение maxNonInclusive - minInclusive
, то он будет вращаться бесконечно, просто потому, что вы не можете придумать больше целых чисел, чем диапазон.
Кроме того, arrayContainsInt
посылается параметр x
в качестве значения следующего максимального индекса в массиве, чтобы проверить, потому что только x
многие элементы массива были заселены, поэтому проверка остальное не имеет смысл.
Я запутался об этом: 'INT НБР = 1; nbr <2; '. Разве это просто не выполняется, как если бы цикл 'for' был даже там? –
В моем ответе ниже перечислены все вещи, о которых вы упомянули, и делает именно то, что вы просили. –