Java за неделю. Вводный курс - страница 17



Итак, создайте новый объект класса 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 обычно применяется для выхода из подпрограмм, и его не принято использовать в циклах. Но, поскольку он тоже может досрочно прерывать выполнение блока команд, мы рассматриваем его в этом разделе.