Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Выражения и оператор присваивания




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

Арифметические выражения

Выражения в Java строятся по обычным правилам записи алгебраических формул. Для числовых типов используются обычные арифметические опе­раторы: +, -, *, /, % с обычным приоритетом. Бинарная операция % дает ос­таток от деления. Деление целых чисел в Java дает целое число, поэтому ре­зультатом деления 4/3 будет 1, а результатом деления 3/4 будет 0. Если в бинарной операции один из операндов вещественный, а другой целый, то результат тоже будет вещественный. При этом целое число будет автомати-


чески, неявно преобразовываться к представлению вещественного числа. Такое преобразование форматов называется (неявной) конверсией типов. Конверсия типов называется также приведением или кастингом (от англий­ского термина casting, обозначающего эту операцию).

Пусть в результате деления двух целых чисел index и 2 нужно получить ве­щественное число. При выполнении операции присваивания:

r.ean = index/2;

если mean — вещественная, a index — целая переменная, произойдет неяв­ная конверсия типов: сначала будет получен целый результат деления двух целых чисел, после чего он будет конвертирован в вещественный тип при выполнении операции присваивания. Часто это совсем не то, что предпола­гает разработчик: ведь (double) (3/2) будет 1.0, а не 1.5. Выполнение деле­ния вещественных чисел в этой задаче можно сделать несколькими спосо­бами. Самый простой вариант:

mean = index/2.;

Здесь константа 2 сразу представлена как вещественная. Для того чтобы выполнилось деление вещественных чисел при делении двух целых, необ­ходимо выполнить явную конверсию типов хотя бы одного из операндов, например:

mеаn = (double)index/2;

Операция кастинга более приоритетна, чем арифметические операции, по­этому в данном примере сначала значение целой переменной index будет приведено к типу double. После этого будет выполняться операция деления, но для ее выполнения сначала будет выполнена неявная конверсия целого значения 2 к тому же типу double.

Булевские и условные выражения

Выражения булевского типа могут строиться из булевских переменных и констант, соединенных обычными операциями булевой алгебры && для И, || для ИЛИ и! для НЕ. Операции отношения: ==,!=, >,<,>=,<=

тоже порождают результат булевского типа. Например, результатом выра­жения:

(2==6)

будет false, а результатом выражения

(5!= 6)

будет true. Частой ошибкой начинающих программистов является исполь­зование вместо знака отношения == операции присваивания =.

Условное выражение имеет вид:

<условие>? <выражение1>: <выражение2>


Результатом условного выражения является выражение1, если значение условия истинно, и выражение2, если значение условия ложно. Например стоимость телефонного разговора с повременной тарификацией после пер­вой минуты может быть вычислена с помощью условного выражения так:

t<=l? minPrice: t*minPrice

если t — время разговора в минутах, a minPrice — стоимость одной минуты разговора.

Другие операции

Операции ++ (инкремент), -- (декремент), += (увеличение значения на и подобные им также допускаются в выражениях. Например, пусть нужнс вычислить среднее число обработанных заявок в единицу времени после окончания обработки очередной заявки. Для этого можно увеличить на еди­ницу количество count обработанных заявок, после чего разделить это ко­личество на время, прошедшее с момента начала обработки. Это можно за­писать так:

count = count + 1; N = count/getTime();

Более коротко это записывается с использованием операции инкремента:

COunt++;

N = count/getTime();

Но это же можно записать еще более кратко:

N = ++count/getTime();

В последней записи сначала значение count увеличивается на 1, а затем оно используется в выражении.

Другой пример. Пусть необходимо при каждом поступлении отброшенной необслуженной заявки увеличить сумму штрафа Penalties на величин) penaltyPerCall. Для этого можно выполнить оператор:

Penalties += penaltyPerCall;

Данная запись эквивалентна следующей:

Penalties = Penalties + penaltyPerCall;

Для комбинации нескольких операций в одном выражении используются, разные правила приоритета и ассоциативности. Например, обычные ариф­метические операции одного приоритета +и-, * и / и им подобные лево- ассоциативны:

a-b+c-d -= (((a-b)+c)-d),

в то время как операции =, ++, —, += и некоторые другие — правоассоциа- тивны, например,

a+=b+=c=d = (a+=(b+=(c=d)))


Эти операторы могут встречаться и в других конструкциях, например, в ус­ловном выражении:

(а++ == b)? b-- -d: ++f+l

Во всех случаях, если программист не уверен в порядке выполнения опера­ций, он должен использовать круглые скобки.





Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 360 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Чтобы получился студенческий борщ, его нужно варить также как и домашний, только без мяса и развести водой 1:10 © Неизвестно
==> читать все изречения...

2452 - | 2334 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.