Функция библиотеки Math, генерирующая случайные дроби, Math.random(), – одна из наиболее широко используемых в самых разных задачах. Дело в том, что использование этой функции позволяет избежать многократного введения данных с клавиатуры – особенно актуально это становится в заданиях, которые требуют вводить с клавиатуры десятки, а то и сотни значений.
В ближайших темах мы начнем изучение и использование так называемых "команд повторения" (циклов) – вот тогда мы и сможем в полной мере оценить использование функции-генератора случайных чисел.
Как уже было сказано, для работы со случайными числами в языке Java используется функция Math.random(), которая выбирает случайным образом одну из десятичных дробей из диапазона от 0 (включая) до 1 (не включая).
Для того, чтобы увеличить диапазон выбора чисел, умножают функцию на соответствующее значение: например, 60*Math.random() выбирает случайным образом одну из десятичных дробей из диапазона от 0 (включая) до 60 (не включая).
Для того, чтобы "сдвинуть" диапазон выбора чисел, добавляют к функции число (положительное или отрицательное), устанавливающее диапазон сдвига: например, 60*Math.random()+10 выбирает случайным образом одну из десятичных дробей из диапазона от 10 (включая) до 70 (не включая).
|
|
Для того, чтобы использовать эту функцию для выбора целых чисел, производят действие "преобразования типа": перед заключенным в скобки выражением ставят в скобках указание на тип, в который надо произвести преобразование – в нашем случае, для целых чисел, это (int).
Таким образом, если общий вид команды для выбора случайных чисел выглядит, например, следующим образом:
x=-20 + (int)(75*Math.random())
то ее смысл – "в переменную х заносится случайным образом выбранное целое число, одно из 75-и чисел, начиная с -20 и вверх" – или "в переменную х заносится случайным образом выбранное целое число из диапазона от -20 до +54".
Общая формула для генерации случайного целого числа x, такого, что a≤ x ≤ b:
x= a+ (int)(Math.random()*(b-a+1))
Например, для генерации случайного целого положительного двузначного числа (a=10; b=99) мы получаем:
x= 10+ (int)(Math.random()*(99-10+1)) или x= 10+ (int)(Math.random()*90)
Обратите внимание, что 90 – это количество двузначных положительных чисел (количество вариантов для генерации случайного числа), а 10 – значение минимального варианта.
Раздел №15 (часть 1).
Команды повтора – Цикл for
В большинстве классов (программ) есть необходимость в многократном выполнении каких-то команд, действий, блоков.
Приведем несколько примеров таких действий:
· необходимо вывести на экран серию из 100 чисел;
· подсчитать сумму 250 элементов арифметической последовательности;
|
|
· принять с клавиатуры 25 значений и найти наибольшее из них;
· и так далее…
Разумеется, писать для каждой из таких задач код из последовательных команд – не только утомительно, но и совершенно неразумно: мало того, что количество строк кода становится слишком большим при слишком простой цели, так еще и коды содержат фактически одни и те же, повторяющиеся снова и снова команды.
Вот как раз для решения такого рода проблем ("много строк фактически повторяющегося кода") в каждом языке, в том числе и в Java, существует инструмент под названием "цикл". С помощью цикла можно написать класс таким образом, чтобы те действия, которые необходимо повторять снова и снова, были записаны один раз, но внутри повторяющегося фрагмента (в этом случае говорят – внутри тела цикла).
Кстати, в компьютерных науках циклы называются "инструментом повторного исполнения" – с их помощью можно писать классы по принципу "мало написано – много делается".
В Java существует несколько видов циклов – и мы начнем знакомиться с ними с цикла, который называется "цикл for". Он также известен как "цикл с параметром", "цикл с заранее известным числом повторов".
Следует иметь в виду, что в языке Java цикл for является чрезвычайно мощным инструментом, но в рамках данного курса мы его используем достаточно "классически", ограничиваясь только частью его возможностей.
Сегодня в языке Java цикл for получил массу дополнительных возможностей и это, с одной стороны, сделало его гораздо более сильным инструментом, но, при этом, и более сложным; с другой – его по-прежнему можно использовать в стандартном, классическом виде.