Как создать случайное значение между двумя различными наборами чисел - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь сгенерировать случайный символ между следующими двумя наборами юникода от U + 0020 до U + 007E и от U + 00A0 до U + 00FF. Я создал код для генерации значения от U + 00A0 до U + 00FF, но мне также нужно, чтобы мой генератор включал значения от U + 00A0 до U + 00FF, как это возможно? Любая помощь очень ценится, вот что я имею до сих пор. (П.С. Я использую семена для тестирования). Например, вместо того, чтобы просто пытаться создать целое число от 1 до 10, я хотел бы знать, как создать случайное число, которое может быть в диапазоне от 1 до 10 или от 50 до 100.

  private static char random(){
        long seed = 1776;
        Random number = new Random(seed);
        int randomNumber = number.nextInt(126) + 32;
        char a = (char) randomNumber;
        return a;
    }

1 Ответ

0 голосов
/ 01 сентября 2018

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

Пример кода для генерации 20 случайных чисел в диапазонах 0x20 - 0x7E и 0xA0 - 0xFF включительно:

int low1 = 0x20, high1 = 0x7E, low2 = 0xA0, high2 = 0xFF;
int count1 = high1 - low1 + 1;
int count2 = high2 - low2 + 1;

long seed = 1776;
Random rnd = new Random(seed);
for (int i = 0; i < 20; i++) {
    int n = rnd.nextInt(count1 + count2);
    if (n < count1) { // random number is for range 1
        n = n + low1; // offset into range 1
    } else { // random number is for range 2
        n = n - count1 + low2; // offset into range 2
    }
    System.out.printf("%02X ", n);
}

Пример вывода

6B 6B A5 DA B3 F7 2B C6 AB F2 3F EE F9 A5 28 31 AD D3 66 B0 
...