Java. Урок 35. Генерация случайных чисел

Уроки для начинающих   27 Февраль 2013  Автор статьи:  

Очень часто бывает нужно создать некоторые случайные данные, которые могут быть нам полезны как в работе алгоритмов, так и при их тестировании. Для этих целей в языке Java существует генератор случайных чисел Random. Данный класс имеет два конструктора: по умолчанию, который использует текущую дату для своей инициализации и конструктор, который принимает на вход некоторое число типа long. Очевидно, если вы будете использовать второй конструктор с одинаковым значением параметра, то в результате у вас будут генерироваться одинаковые случайные значения, поэтому на практике в основном применяют первый. Рассмотрим методы классы Random:

  • nextBoolean()
  • nextInt()
  • nextLong()
  • nextFloat()
  • nextDouble()

Стоит отметить, что вещественные числа генерируются только в промежутке с 0 до 1, а целочисленные по всему спектру значений. Кроме того, целые числа можно генерировать в диапазоне с 0 до max — 1: nextInt(max).
Заполним массив байт случайными значениями:

1
2
3
4
5
6
Random r = new Random();
byte[] arr = new byte[100];
r.nextBytes(arr);
for(int i = 0; i < arr.length; i++){
    System.out.println(arr[i]);
}

К сожалению, аналогов функции nextBytes нет для других типов, поэтому придется явно инициализировать каждое значение:

1
2
3
4
5
6
Random r = new Random();
int[] arr = new int[100];
for(int i = 0; i < arr.length; i++){
    arr[i] = r.nextInt();
    System.out.println(arr[i]);
}

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

  • Serega

    «Например, для того, чтобы проверить сортировку достаточно подать на вход случайную последовательность, а затем проверить, что предыдущее число меньше текущего»
    Не могу не придраться xD А если та фигня, которую мы написали вместо нормальной сортировки, просто портит исходный массив (например, заполняет его нулями)? Подобных неточностей в формулировках надо избегать.

    • http://cybern.ru/ lordrp

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

  • Little Fish

    Дурацкий вопрос: будут еще уроки в этом разделе?

    • http://cybern.ru/ lordrp

      Конкретно в этом, нет. Но будет курс для профессионалов Java. А пока можно продолжить изучение в раздела Swing.

  • naut

    А где же задачки?!

Научиться программировать

  • на Delphi

  • на Java

  • на C++