2015-11-21 2 views
0

Я хотел бы генерировать уникальные штыри на основе случайного числа. Я нашел это на Stack Overflow How to generate a random five digit number Java. Этот вопрос использует время для генерации чисел, поэтому вы получаете много дубликатов.Создание случайного штыря из 5 цифр

Вот мой код

public int createRandomPin() { 
    int k = random.nextInt(Integer.SIZE); 
    k = (k + 1) * 9999; 
    if (9999 > k || k > 99999) { 
     //then regenerate 
    } else { 
     return k; 
    } 
} 

Мой вопрос тогда

NetBeans выдает предупреждение отсутствующий "возврат". Кроме того, мне нужно реструктурировать код, чтобы, если он не является 5-значным знаком, он генерирует снова, прежде чем «возвращает k».

ответ

5

Я предлагаю генерировать случайное число, используя класс SecureRandom, а затем, поскольку он должен состоять из 5 цифр, создать случайное число между 0 и 99999 с использованием random.nextInt (100000), здесь 0 включено и 100000 является эксклюзивным, а затем отформатируйте его на 5 цифр, добавив нуль.

SecureRandom random = new SecureRandom(); 
int num = random.nextInt(100000); 
String formatted = String.format("%05d", num); 
System.out.println(formatted); 

Я надеюсь, что это решает вашей проблема

Edit: Это сообщение неправильно сказало 10000, было отредактировано, чтобы сказать 100,000

+0

Если вы используете String.format, то каждый раз, когда вы получите 5-значное число, т. Е. ноль будет добавляться, если число меньше, чем пять. – Naruto

+0

Я пробовал свой способ генерировать булавки намного лучше, чем другие способы. Мне нужно добавить что-то, что может проверить, имеет ли вывод 5 цифр, если он не регенерируется. Ей возвращается. – Craig

+0

Можно ли обновить свой ответ? – Craig

1

Integer.SIZE дает число в битах типа данных int. Это не имеет ничего общего с диапазоном диапазона для случайного значения.

Использование в качестве аргумента Random.nextInt не имеет никакого смысла (на самом деле оно генерирует случайное значение в диапазоне [0,32)).

Просто сгенерируйте int value = random.nextInt(100000), чтобы получить значение в [0,99999].

Теперь ваше определение 5-значного PIN-кода неточно, 40 может быть истолковано как 00040, так что все равно 5 цифр, если вы его поместите. Вы должны учитывать это, поскольку форсирование 5 «видимых» цифр означает создание числа в диапазоне [10000,99999], но это просто неудобное решение.

0

RandomUtils.randomNumeric(int count) или RandomUtils.randomNumeric(int inLength, int maxLength) от апачей общего lang3 также может быть использован для тех же целей ,

Смежные вопросы