Оценить:
 Рейтинг: 3.5

Java за неделю. Вводный курс

Год написания книги
2018
<< 1 ... 8 9 10 11 12 13 14 15 16 ... 25 >>
На страницу:
12 из 25
Настройки чтения
Размер шрифта
Высота строк
Поля

Прежде всего, сгенерируйте случайное число. Для этого вам придется забежать немного вперед и воспользоваться приемами объектно—ориентированного программирования. Импортируйте класс генератора случайных чисел Random:

import java. util. Random;

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

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

Random rnd = new Random(System.currentTimeMillis ());

Чтобы сгенерировать целое число, воспользуйтесь методом nextInt (limit). Этот метод генерирует псевдослучайное целое число в диапазоне от нуля до предела limit, но не включая его. Например, метод nextInt (10) возвратит целое число в диапазоне от 0 до 9 включительно.

Сгенерируйте псевдослучайное число secret в диапазоне от 1 до 10 при помощи метода nextInt () объекта rnd:

int secret = 1 + rnd.nextInt (10);

Окончательный фрагмент кода для генерации псевдослучайного целого числа выглядит так:

Random rnd = new Random(System.currentTimeMillis ());

int secret = 1 + rnd.nextInt (10);

Теперь у вас есть «секретное» случайное число, на которое ссылается переменная secret. Осталось реализовать сравнение секретного значения со значением, которое ввел пользователь. Запрос на ввод значения должен повторяться до тех пор, пока пользователь не угадает.

Разработайте программу самостоятельно, а затем сравните результат с листингом 4.4. Ваш код не обязательно должен совпасть с примером – главное, чтобы он правильно работал.

Листинг 4.4 Пример прерывания цикла

import javax.swing.JOptionPane;

import java. util. Random;

public class Listing4_4 {

public static void main (String [] args) {

Random rnd = new Random(System.currentTimeMillis ());

int secret = 1 + rnd.nextInt (10);

int userData;

String userInput;

while (true) {

// Выводим окно запроса

userInput = JOptionPane.showInputDialog («Угадайте число от 1 до 10»);

// Преобразуем строку в число в явном виде

userData = Integer.parseInt (userInput);

if (userData == secret) {

JOptionPane.showMessageDialog (null, «Вы угадали число!»);

break;

}

}

}

}

Поскольку заранее не известно сколько раз придется задать вопрос, мы сознательно запускаем «вечный» цикл while со служебным значением true вместо условия. В каждом проходе цикла мы сравниваем введенное пользователем число со значением, загаданным в программе. В случае совпадения выводим сообщение и принудительно прерываем цикл. Количество попыток не может быть больше десяти, поэтому другие способы выхода из программы не предусмотрены.

Самостоятельно доработайте программу:

– Добавьте в тело цикла счетчик попыток. Пусть значение счетчика выводится в окне, сообщающем о совпадении: «Вы угадали число! Количество попыток:». Используйте конкатенацию строк, а также служебную последовательность "\n» для переноса строки текста.

– Добавьте прекращение угадывания и выход из программы при вводе числа 99.

4.4.2 Оператор досрочного выхода continue

Оператор continue прерывает выполнение тела цикла и вызывает досрочный переход к следующей итерации цикла, например:

for (int i=1; i <=10; i++) {

if (i== (i/2) *2) {

continue;

}

System.out.println («i=" + i);

}

Условие i== (i/2) *2 выполняется только в том случае, если значение i – четное, потому что тип переменной i объявлен как int. При делении нечетного числа на 2 дробная часть будет отброшена, и после умножения на 2 исходное значение не вернется. При истинности выражения сработает оператор continue и вызовет следующую итерацию цикла, минуя вывод на печать. Поэтому в окно консоли будут выведены только нечетные числа.

4.4.3 Оператор возврата return

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

Оператор return может возвращать из подпрограммы параметр, который указан после ключевого слова, например:
<< 1 ... 8 9 10 11 12 13 14 15 16 ... 25 >>
На страницу:
12 из 25