2013-02-12 3 views
1

У меня есть следующий код, генерирующий 5-значные случайные числа и добавление их в ArrayList. Однако эти числа должны быть уникальными идентификаторами.Создайте массив УНИКАЛЬНЫХ 5-значных случайных чисел в Java?

for(int i = 0; i < myArr.length; i++) { 
    int id = (int) (Math.round(Math.random() * 89999) + 10000); 
    idArr.add(id); 
} 

Я пытаюсь выяснить, как я могу проверить, если номер уже был в массиве, прежде чем добавить, но я не могу получить мою голову вокруг лучший способ сделать это.

ответ

1

Используйте ArrayList вместо array. Таким образом вам просто нужно будет использовать метод ArrayList#contains(obj), чтобы проверить, находится ли id в ArrayList или нет.

Или вы можете просто работать с HashSet, который будет работать быстрее с помощью метода HashSet#contains().

+0

Благодаря Рохит - класс содержит метод был именно то, что мне нужно было – fxfuture

3

Не используйте (Array) Список, используйте Set:

Set<Integer> set = ...; 
while (set.size() < myArr.length) { 
    set.add(yourRandomNumber); 
} 
+0

Minor комментарий: ОП просил «уникальных 5-значных чисел», а не «5 уникальных чисел». Число '5' должно быть' myArr.length'. –

+0

исправлено myArr.length –

+0

Спасибо. Я дам это – fxfuture

1

Вы можете создать Set чисел. Например .:

Set<Integer> intSet = new HashSet<Integer>(); 
while(intSet.size() < myArr.length) { 
    intSet.add(getNextRandomInt()); 
} 

Тогда йо может сделать что-нибудь с этим Set.

Так что, если вам нужен массив, просто позвоните:

Integer[] intArray = intSet.toArray(new Integer[myArr.length]); 

или, если вам нужно ArrayList или int[] массив:

// ArrayList: 
List<Integer> ints = new ArrayList<Integer>(); 
ints.addAll(intSet); 

// int[] array: 
int[] intArray = new int[myArr.length]; 
for(int i = 0; i<intArray.length; ++i) { 
    intArray[i] = int.get(i); 
} 
0

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

(я знаю, что это никогда не произойдет на практике, но это теоретическая возможность.)

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

int n = new Random().nextInt(89999 - myArr.length) + 10000; 
for (int i = 0; i < myArr.length; i++) { 
    idArr.add(n++); 
} 
Смежные вопросы