Подтвердить что ты не робот

Случайное число Java с заданной длиной

Мне нужно размножить случайное число с ровно 6 цифрами в Java. Я знаю, что я мог бы цитировать 6 раз над случайным пользователем, но есть ли еще один способ сделать это в стандартном Java SE?

EDIT: Следующий вопрос: Теперь, когда я могу сгенерировать 6 цифр, у меня возникла новая проблема, весь ID, который я пытаюсь создать, имеет синтаксис 123456-A1B45. Итак, как мне рандомизировать последние 5 символов, которые могут быть либо A-Z, либо 0-9? Я думаю использовать значение char и randomice число от 48 до 90 и просто отказаться от любого значения, которое получает числа, которые представляют 58-64. Это способ пойти или есть лучшее решение?

ИЗМЕНИТЬ 2: Это мое окончательное решение. Спасибо за помощь всем!

protected String createRandomRegistryId(String handleId)
{
    // syntax we would like to generate is DIA123456-A1B34      
    String val = "DI";      

    // char (1), random A-Z
    int ranChar = 65 + (new Random()).nextInt(90-65);
    char ch = (char)ranChar;        
    val += ch;      

    // numbers (6), random 0-9
    Random r = new Random();
    int numbers = 100000 + (int)(r.nextFloat() * 899900);
    val += String.valueOf(numbers);

    val += "-";
    // char or numbers (5), random 0-9 A-Z
    for(int i = 0; i<6;){
        int ranAny = 48 + (new Random()).nextInt(90-65);

        if(!(57 < ranAny && ranAny<= 65)){
        char c = (char)ranAny;      
        val += c;
        i++;
        }

    }

    return val;
}
4b9b3361

Ответ 1

Создайте число в диапазоне от 100000 до 999999.

// pseudo code
int n = 100000 + random_float() * 900000;

Я уверен, что вы уже прочитали документацию, например. Random, и вы можете сами найти остальных.

Ответ 2

Чтобы сгенерировать 6-значное число:

Используйте Random и nextInt как следующим образом:

Random rnd = new Random();
int n = 100000 + rnd.nextInt(900000);

Обратите внимание, что n никогда не будет 7 цифр (1000000), так как nextInt(900000) может больше не возвращать 899999.

Итак, как мне рандомизировать последние 5 символов, которые могут быть либо A-Z, либо 0-9?

Здесь простое решение:

// Generate random id, for example 283952-V8M32
char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
Random rnd = new Random();
StringBuilder sb = new StringBuilder((100000 + rnd.nextInt(900000)) + "-");
for (int i = 0; i < 5; i++)
    sb.append(chars[rnd.nextInt(chars.length)]);

return sb.toString();

Ответ 3

попробуйте следующее:

public int getRandomNumber(int min, int max) {
    return (int) Math.floor(Math.random() * (max - min + 1)) + min;
}

Ответ 4

Если вам нужно указать точную длину символа, нам нужно избегать значений с 0 впереди.

Конечное строковое представление должно иметь такую ​​точную длину символа.

String GenerateRandomNumber(int charLength) {
        return String.valueOf(charLength < 1 ? 0 : new Random()
                .nextInt((9 * (int) Math.pow(10, charLength - 1)) - 1)
                + (int) Math.pow(10, charLength - 1));
    }

Ответ 5

int rand = (new Random()).getNextInt(900000) + 100000;

РЕДАКТИРОВАТЬ: Исправлена ​​ошибка "за один" и удалялось неверное решение.

Ответ 6

Для последующего вопроса вы можете получить число между 36 ^ 5 и 36 ^ 6 и преобразовать его в базу 36

ОБНОВЛЕНО:

с помощью этого кода

http://javaconfessions.com/2008/09/convert-between-base-10-and-base-62-in_28.html

Это написано BaseConverterUtil.toBase36(60466176+r.nextInt(2116316160))

но в вашем случае использования его можно оптимизировать с помощью StringBuilder и иметь номер в обратном порядке, т.е. 71 следует преобразовать в Z1 вместо 1Z

Редакция:

Ответ 7

Будет ли это работать для вас?

public class Main {

public static void main(String[] args) {
    Random r = new Random(System.currentTimeMillis());
    System.out.println(r.nextInt(100000) * 0.000001);
}

}

например. 0.019007

Ответ 8

Создайте случайное число (которое всегда находится между 0-1) и умножьте на 1000000

Math.round(Math.random()*1000000);