Условный оператор аналогич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 версии 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);
}
}
Задания