Java для всех [Алексей Васильев] (pdf) читать постранично, страница - 18

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Результат:
System.out.println(
V2t?(S1+S2)/(T-t):-1. Тернарный оператор здесь необходим исключительно с одной целью: предотвратить возможное деление на ноль
при условии, что значения переменных T и t совпадают. Если общее время движения
превышает время движения по первому участку, значение скорости автомобиля на
втором участке вычисляется по приведенной выше формуле. Если данное условие
не выполняется, то переменной V2 для скорости на втором участке присваивается
формальное отрицательное значение -1 . В зависимости от значения перемен-

Использование основных операторов    47

ной V2 либо выводится информация о вычисленном значении скорости на втором
участке, либо появляется сообщение "Это невозможно!". Мы используем команду
System.out.println(V2=c*c.
Значение равно true, если уравнение имеет решения, и false — если не имеет.
Если значение переменной state равно true, то тернарным оператором в качестве
результата возвращается числовое значение asin(c/sqrt(a*a+b*b))-alpha, где
переменной alpha предварительно присвоено значение командой alpha=asin(a/
sqrt(a*a+b*b)). В этих выражениях использованы статические методы asin()
и sqrt() из класса Math для вычисления арксинуса и квадратного корня соответственно. Таким образом, при истинном условии значением возвращается решение
уравнения. Если условие (переменная state) равно false, то результатом возвращается текст "решений нет!".



НА ЗАМЕТКУ
При разных значениях условия тернарный оператор возвращает не просто разные
значения, а значения разного типа. Но проблем в данном случае не возникает, поскольку выражение на основе тернарного оператора передано аргументом методу
println(). В этом случае результат тернарного оператора, каким бы он ни был,
автоматически преобразуется в текстовый формат.

54   Глава 1. Основы Java
Результат выполнения программы будет таким:
Результат выполнения программы (из листинга 1.9)
Уравнение a*cos(x)+b*sin(x)=c
Параметры:
a=5.0
b=3.0
c=1.0
Решение для x: -0.8580262366249893

Если поменять значения исходных параметров уравнения (переменной c присвоить
значение 10), получим следующее:
Результат выполнения программы (из листинга 1.9)
Уравнение a*cos(x)+b*sin(x)=c
Параметры:
a=5.0
b=3.0
c=10.0
Решение для x: решений нет!

Хотя использование тернарного оператора может быть достаточно эффективным,
обычно такие задачи решаются с помощью условного оператора и оператора выбора, которые описываются в следующей главе.

Кодирование символов
Рассмотрим простую иллюстративную программу, в которой для записи сразу двух
символьных значений типа char используется одна переменная целочисленного
типа int.
В программе учитывается то обстоятельство, что тип int в Java имеет размер 32 бита,
а для записи основных символов достаточно 16 бит. Таким образом, объем памяти,
выделяемой переменной типа int, достаточен для записи по меньшей мере двух
символов (значений типа char). Принцип записи символьных значений в виде
числа следующий: начальные 16 битов числа (младшие биты) будут содержать
код первого символа, а следующие 16 битов числа (старшие биты) — код второго
символа (листинг 1.10).
Листинг 1.10. Кодирование символов
class Demo{
public static void main(String args[]){
// Кодовое число:
int num;
// Исходные буквы для кодирования:
char A='А',B='ы';
// Буквы после декодирования:

Использование основных операторов    55

}

}

char X,Y;
// Вычисление кода:
num=((int)B>16);
X=(char)(num^((int)Y