You are here: Home » Учебник » Генерация случайных чисел

Генерация случайных чисел

Ключевой момент: вы можете использовать Math.random() для получения величины double между 0.0 and 1.0, исключая 1.0.

Предположим вы хотите создать программу для первоклашек, чтобы они могли практиковаться в вычитании. Программа генерирует два случайных числа в одну цифру, number1 и number2, с условием number1 >= number2 и отображает школьнику вопрос вроде такого: «Сколько будет 9 - 2?». После ввода школьником ответа, программа отображает сообщение о том, является ли он правильным.

Предыдущие программы генерировали случайные числа с использованием System.currentTimeMillis(). Более лучшим подходом является использование метода random() из класса Math. Вызов этого метода возвращает случайную величину двойной точности d, такую, что 0.0 ≤ d < 1.0. Т.е. (int)(Math.random() *10) возвращает случайное целое число в одну цифру (т.е. число между 0 и 9).

Программа может работать следующим образом:

  1. Сгенерируйте два однозначных целых числа number1 и number2.
  2. Если number1 < number2, поменять местами number1 с number2.
  3. Попросите ученика ответить: «Сколько будет number1 – number2?»
  4. Проверить ответ ученика и показать, является ли он правильным.

Полный листинг программы:

import java.util.Scanner;

public class SubtractionQuiz {
    public static void main(String[] args) {
        // 1. Генерация двух однозначных числа
        int number1 = (int) (Math.random() * 10);
        int number2 = (int) (Math.random() * 10);

        // 2. Если number1 < number2, поменять number1 с number2
        if (number1 < number2) {
            int temp = number1;
            number1 = number2;
            number2 = temp;
        }

        // 3. Задать школьнику вопрос ”Сколько будет number1 – number2?”
        System.out.print
        ("Сколько будет " + number1 + " - " + number2 + "? ");
        Scanner input = new Scanner(System.in);
        int answer = input.nextInt();

        // 4. Оценить ответ и вывести результат
        if (number1 - number2 == answer) {
            System.out.println("Ты прав!");
        } else {
            System.out.println("Твой ответ неверен.");
            System.out.println(number1 + " - " + number2
                    + " должно быть " + (number1 - number2));
        }
    }
}

Для перемены местами двух значений number1 и number2 используется временная величина temp (строка 11), чтобы сначала сохранить значение number1. Значение number2 присваивается number1 (строка 12), а значение temp присваивается number2 (строка 13).

Проверь себя:

  1. Что из следующего возможно получить вызывая Math.random()?

323.4, 0.5, 34, 1.0, 0.0, 0.234

  1.  

a. Как бы вы сгенерировали случайное число i так, чтобы 0 ≤ i < 20?

b. Как бы вы сгенерировали случайное число i так, чтобы 10 ≤ i < 20?

c. Как бы вы сгенерировали случайное число i так, чтобы 10 ≤ i ≤ 50?

d. Напишите выражение, которое случайным образом возвращает 0 или 1.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

wp-puzzle.com logo