Условный оператор аналогич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.
- Напишите программу, находящую среднее арифметическое всех элементов заданного массива действительных числел.
- Напишите программу, определяющую второй по величине элемент массива различных действительных чисел.