Условный оператор аналогичeн условному оператору Ruby, его общая форма такова:
if (логическоеВыражение) {
. . .
} else {
. . .
}
Здесь логическоеВыражение может быть любым фрагментом кода, результатом вычисления которого является величина типа boolean.
В Ruby мы пользовались оператором elseif. Обратите внимание, что в языке Java его следует заменить на else if:
class TestIf {
public static void howBig(int i) {
if (i < 10) {
System.out.println ("меньше 10");
} else if (i < 20) {
System.out.println ("между 10 и 20");
} else if (i < 30) {
System.out.println ("между 20 и 30");
} else {
System.out.println( "больше или равно 30" );
}
}
public static void main(String[] args) {
howBig(7);
howBig(15);
howBig(23);
howBig(105);
}
}
Тело оператора не обязательно заключать в фигурные скобки, если оно состоит из единственного выражения.
if (i < 10)
System.out.println ("Меньше 10");
else
System.out.println ("Больше или равно 10");
Тернарный оператор ? : идентичен такой же условной операции в Ruby. Например, строка
(counter == 0) ? i++ : i--;
означает то же самое, что и
if (counter == 0) i++; else i--;
Длинная форма записи более наглядна, однако при компиляции программы в байт-код в обоих случаях получится одинаковый результат. Вот еще один пример использования тернарного оператора.
Пример
Следующая программа определяет четность введенного числа.
import java.io.*;
class TestOdd {
public static void main(String[] args)
throws Exception{
BufferedReader r = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Введите целое число: ");
int i = Integer.parseInt(r.readLine());
String str = i % 2 == 0 ? "четно" : "нечетно";
System.out.println("Число "+i+" " + str);
}
}
При выборе из большего числа альтернатив удобнее использовать оператор switch (аналог оператора when в языке Ruby). Ниже приведен его общий вид.
switch (выражение) {
case значение1:
блок1;
break;
case значение2:
блок2;
break;
. . .
case значениеN:
блокN;
break;
default:
блокN+1;
}
Выражение (должно быть целого или символьного типа) сравнивается последовательно со всеми значениями, указанными после ключевых слов case. При совпадении с одним из них выполняется соответствующий блок операторов.
Оператор break завершает выполнение блока, а при его отсутствии управление передается следующему блоку. Если совпадений не будет обнаружено, то выполняется блок, следующий за ключевым словом default.
Сравните использование конструкций выбора в языках Java и Ruby:
| Java | Ruby |
|---|---|
char test;
String answer;
. . .
switch (test) {
case 'Y':
case 'y':
answer = "Нет!";
break;
case 'N':
case 'n':
answer = "Да!!!";
break;
default:
answer = "Что?";
}
System.out.println(answer);
|
. . . case test when 'Y', 'y' answer = "Нет!"; when 'N', 'n' answer = "Да!!!"; else answer = "Что?"; end puts(answer); |
Цикл while в языке Java работает точно также, как и в Ruby. Его общий вид таков:
while (логическоеУсловие) {
. . .
}
Вариацией цикла while является оператор do while. При его использовании тело цикла будет обязательно выполнено хотя бы один раз.
do {
. . .
} while (логическоеУсловие);
Пример
Следующий фрагмент программы печатает числа от 1 до 5 включительно.
int i = 1;
while (i <= 5) {
System.out.println(i);
i += 1;
}
Оператор for языка Java, наоборот, значительно отличается от одноименного итератора в языке Ruby:
for (инициализация; проверка; изменение) {
. . .
}
В круглых скобках содержаться три блока, разделенные символом ; (точка с запятой):
- инициализация
- блок, задающий начальные условия; может включать объявления переменных;
- проверка
- блок, задающий условия завершения работы цикла;
- изменение
- блок, изменяющий значения переменных.
Эту конструкцию, как правило, применяют для повторения цикла фиксированное число раз. Следующая программа демонстрирует его использование.
for (int i = 0; i < 10 ; i++) {
System.out.println(i);
}
Пример
Рассмотрим программу для вычисления факториала введенного числа с помощью цикла for.
import java.io.*;
class Fact {
public static void main(String[] args)
throws Exception{
BufferedReader r = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Введите натуральное число: ");
int n = Integer.parseInt(r.readLine());
if (n > 0) {
int fact = 1;
for (int i = 1; i <= n ; i++) {
fact *= i;
}
System.out.println("Факториал числа " + n
+ " равен " + fact);
} else {
System.out.println(n + " - не натуральное");
}
}
}

Приведенный на рисунке пример запуска этой программы иллюстрирует еще одно отличие языка Java от Ruby. В то время как в Ruby диапазон целых чисел не ограничен, тип int в Java не обладает этим свойством. Число 12! еще способно разместиться в ячейке памяти, отведенной под целое число, а факториалы достаточно больших чисел уже нет! Сравните результаты вычисления факториала с результатами расчетов, полученных в программе Kcalc или в электронных таблицах.
В Java версии 1.1 был добавлен класс BigInteger, поддерживающий целые числа произвольного размера. При использовании этого класса математические операции выполняются заметно медленее.
Пример
Ниже приведена программа, вводящая с клавиатуры массив действительных чисел и печатающая сумму всех его элементов.
Сначала введем количество элементов массива, а затем заполним его элементами, одним за другим. Обратите внимание, что первый элемент массива имеет индекс 0, а последний - на единицу меньший, чем его длина.
import java.io.*;
class TestSum {
public static void main(String[] args)
throws Exception{
BufferedReader r = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Введите количество " +
"элементов массива: ");
int n = Integer.parseInt(r.readLine());
double a[] = new double[n]; // создали массив
double s = 0.0; // обнулили сумму
for (int i = 0; i < n; i++) {
System.out.print("Введите " + (i+1) +
"-й элемент массива: ");
a[i] = Double.parseDouble(r.readLine());
s = s + a[i];
}
System.out.println("Сумма = " + s);
}
}
Задания
- Введите три различных целых числа и определите максимальное и минимальное из них.
- Напишите программу, которая по порядковому номеру месяца печатает его название. При решении воспользуйтесь оператором switch.
- Напишите программу, вычисляющую сумму всех нечетных натуральных чисел, не превосходящих 1000.
- Напишите программу, находящую среднее арифметическое всех элементов заданного массива действительных числел.
- Напишите программу, определяющую второй по величине элемент массива различных действительных чисел.