ПЗ-4
Исследование операторов Java.
Операторы присваивания и арифметические операторы
Подготовка к занятию
1. Операторы присваивания
2. Арифметические операторы
3. Отчет о занятии
На занятии рассматривается порядок применения операторов присваивания и арифметических операторов языка Java при разработке приложений для Java SE в среде IDE NetBeans.
Для выполнения заданий этого занятия требуются программное обеспечение и ресурсы, перечисленные ниже:
Программное обеспечение | Ресурс для загрузки |
Комплект для разработчика на языке Java (JDK) с IDE NetBeans JDK 7u7 with NetBeans 7.2 | http://www.oracle.com/technetwork/java/javase/downloads/jdk-7-netbeans-download-432126.html |
Тестовый редактор TextPad 6 | http://www.textpad.com/download/ |
Перед началом работы создайте на личном флеш-диске каталоги типа:
E:\NBprojectsFIO\pz4_FIO – для записи результатов работы – проектов NetBeans IDE.
E:\JavaFIO\pz4_FIO –- для записи результатов работы, полученных в TextPad.
Примечание: FIO – аббревиатура от фамилии, имени, отчества студента. Например, для Павленко Сергея Леонидовича FIO = PSL.
Подготовка к занятию
П1. Создание и настройка проекта
Используя методку, рассмотренную на пз2, создайте и настройте в NetBeans IDE проект с именем MyApp4_FIO.
П.2. Добавление кода к автоматически созданному исходному файлу
К коду главного класса добавьте вывод сообщения "Исследование операторов Java" путем замены строки
// TODO code application logic hereстрокой
System.out.println("Исследование операторов Java");Сохраните изменения путем выбора команды "Файл" > "Сохранить".
П3. Компиляция и выполнение проекта
Для запуска программы выполните следующие действия:
Выберите команду " Выполнить" > "Запустить главный проект " (F6).
На экране окно NetBeans IDE должно принять вид, подобный приведенному на рис.1.
Рис. 1
Если все получилось – то Вы готовы к выполнению заданий занятия.
Операторы присваивания
Справочная информация
Переменная – это именованная ячейка памяти, содержимое которой может изменяться. Перед тем, как использовать какую-либо переменную, она должна быть задана в области программы, предшествующей месту, где эта переменная используется. При объявлении переменной сначала указывается тип переменной, а затем идентификатор задаваемой переменной. Указание типа позволяет компилятору задавать размер ячейки (объем памяти, выделяемой под переменную или значение данного типа), а также допустимые правила действий с переменными и значениями этого типа. В Java существует ряд предопределенных типов: int – целое число, float – вещественное число, boolean – логическое значение, Object – самый простой объектный тип (класс) Java, и т.д. Также имеется возможность задавать собственные объектные типы (классы), о чем будет рассказано позже.
Объявление переменных a1 и b1, имеющих некий тип MyType1, осуществляется так:
MyType1 a1,b1;
При этом MyType1 – имя типа этих переменных.
Другой пример – объявление переменной j типа int:
Int j;
Объявление переменных может сопровождаться их инициализацией - присваиванием начальных значений. Приведем пример такого объявления целочисленных переменных i1 и i2:
int i1=5;
int i2=-78;
либо
int i1=5,i2=-78;
Напомним, что символ "=" используется в Java и многих других языках в качестве символа присваивания, а не символа равенства, как это принято в математике.
Он означает, что значение, стоящее с правой стороны от этого символа, копируется в переменную, стоящую в левой части. То есть, например, присваивание b=a означает, что в переменную (ячейку) с именем b надо скопировать значение из переменной (ячейки) с именем a. Поэтому неправильное с точки зрения математики выражение
x=x+1
в программировании вполне корректно. Оно означает, что надо взять значение, хранящееся в ячейке с именем x, прибавить к нему 1 (это будет происходить где-то вне ячейки x), после чего получившийся результат записать в ячейку x, заменив им прежнее значение.
После объявления переменных они могут быть использованы в выражениях и присваиваниях:
переменная = значение;
переменная = выражение;
переменная1 = переменная2;
Точка с запятой в конце любой операции присваивания превращает ее в оператор присваивания. Побочное действие операции — присваивание — становится в операторе основным.
Разница между операцией и оператором присваивания носит лишь теоретический характер. Присваивание чаще используется как оператор, а не операция.
Выражения
Из констант и переменных, операций над ними, вызовов методов и скобок составляются выражения (expressions). Разумеется, все элементы выражения должны быть совместимы, нельзя написать, например, 2 + true. При вычислении выражения выполняются четыре правила:
1. Операции одного приоритета вычисляются слева направо: х + у + z вычисляется как (х + у) + z. Исключение: операции присваивания вычисляются справа налево: х = у = z вычисляется как х = (у = z).
2. Левый операнд вычисляется раньше правого.
3. Операнды полностью вычисляются перед выполнением операции.
4. Перед выполнением составной операции присваивания значение левой части сохраняется для использования в правой части.
Следующие примеры показывает особенности применения первых трех правил. Пусть
int а = 3, b = 5;
Тогда результатом выражения b+(Ь=3) будет число 8; но результатом выражения (Ь=3)+b будет число 6. Выражение b+=(b = 3) даст в результате 8, потому что вычисляется как первое из приведенных выше выражений.
Четвертое правило можно продемонстрировать так. При тех же определениях а и ь в результате вычисления выражения b+=а+=b+= 7 получим 20. Хотя операции присваивания выполняются справа налево и после первой, правой, операции значение ь становится равным 12, но в последнем, левом, присваивании участвует старое значение ь, равное 5. А в результате двух последовательных вычислений а+=b+=7; b+=а; получим 27, поскольку во втором выражении участвует уже новое значение переменной ь, равное 12.
Выражения могут иметь сложный и запутанный вид. В таких случаях возникает вопрос о приоритете операций, о том, какие операции будут выполнены в первую очередь. Естественно, умножение и деление производится раньше сложения и вычитания. Остальные правила перечислены в следующем разделе.
Порядок вычисления выражения всегда можно отрегулировать скобками, их можно вставить сколько угодно. Но здесь важно соблюдать "золотую середину". При большом количестве скобок снижается наглядность выражения и легко ошибиться в расстановке скобок. Если выражение со скобками корректно, то компилятор может отследить только парность скобок, но не правильность их расстановки.
Приоритет операций
Операции перечислены в порядке убывания приоритета. Операции на одной строке имеют одинаковый приоритет.
1. Постфиксные операции ++ и --
2. Префиксные операции ++ и --, дополнение ~ и отрицание!.
3. Приведение типа (тип).
4. Умножение *, деление / и взятие остатка %.
5. Сложение + и вычитание -.
6. Сдвиги <<, >>, >>>.
7. Сравнения >, <, >=, <=.
8. Сравнения ==,!=.
9. Побитовая конъюнкция &.
10. Побитовое исключающее ИЛИ ^.
11. Побитовая дизъюнкция |.
12. Конъюнкция &&.
13. Дизъюнкция | |.
14. Условная операция?:.
15. Присваивания =, +=, -=, *=, /=, %=, &=, ^=, |=, <<, >>, >>>.
Примечание:
Дополнительные сведения по данному вопросу можно получить из документов:
· Приложение 4.1пз.doc
· Таблица 2.4. Простые специальные символы.doc
· Таблица 2.5. Составные специальные символы.doc
Задание для практической работы
а) Дополните код главного класса проекта строками 18-24 с рис.2, после чего выполните приложение. Если все сделано правильно, то в окне «Вывод» должны появиться сообщения, как на рис.3.
Рис. 2
Рис. 3
б). Дополните строки программы, введенные согласно п.1.2а, строчными комментариями.
Арифметические операторы
Справочная информация
К арифметическим операциям относятся:
· сложение + (плюс);
· вычитание - (дефис);
· умножение * (звездочка);
· деление / (наклонная черта — слэш);
· взятие остатка от деления (деление по модулю) % (процент);
· инкремент (увеличение на единицу) ++;
· декремент (уменьшение на единицу) –
Примечание.
Первые 5 операций из приведенного списка также могут быть реализованы с помощью операторов, представляющих собой составные специальные символы (см. табл. 2.5).
Между сдвоенными плюсами и минусами нельзя оставлять пробелы. Сложение, вычитание и умножение целых значений выполняются как обычно, а вот деление целых значений в результате дает опять целое (так называемое "целое деление"), например, 5/2 даст в результате 2, а не 2.5, а 5/(-3) даст -1. Дробная часть попросту отбрасывается, происходит усечение частного. Это поначалу обескураживает, но потом оказывается удобным для усечения чисел.
Примечание:
В Java принято целочисленное деление.
Это странное для математики правило естественно для программирования: если оба операнда имеют один и тот же тип, то и результат имеет тот же тип. Достаточно написать 5/2.0 или 5.0/2 или 5.0/2.0 и получим 2.5 как результат деления вещественных чисел.
Операция деление по модулю определяется так: а % b = а - (а / b) * b; например, 5%2 даст в результате 1, а 5% (-3) даст, 2, т.к. 5 = (-3) * (-1) + 2, но (-5)%3 даст -2, поскольку -5 = 3 * (-1) - 2.
Операции инкремент и декремент означают увеличение или уменьшение значения переменной на единицу и применяются только к переменным, но не к константам или выражениям, нельзя написать 5++ или (а + b)++.
Например, после приведенных выше описаний i++ даст -99, a j—- даст 99.
Интересно, что эти операции 'можно записать?и перед переменной: ++i, — j. Разница проявится только в выражениях: при первой формe записи (постфиксной) в выражении участвует старое значение переменной и только потом происходит увеличение или уменьшение ее значения. При второй форме записи (префиксной) сначала изменится переменная и ее новое значение будет участвовать в выражении.
Например, после приведенных выше описаний, (k++) + 5 даст в результате 10004, а переменная k примет значение 10000. Но в той же исходной ситуации (++k) + 5 даст 10005, а переменная k станет равной 10000.
Примечание:
Дополнительные сведения по данному вопросу можно получить из документов:
· Приложение 4.1пз.doc
· Таблица 2.4. Простые специальные символы.doc
· Таблица 2.5. Составные специальные символы.doc
Задание для практической работы
а). Разместите строки кода программы, введенные согласно п.1.2, в блочном комментарии.
б). Дополните код главного класса проекта строками, выполнение которых в приложении позволит пояснить особенности работы остальных арифметических операторов.
в). Для каждого арифметического оператора получите скрины окон кода и вывода по примеру рис.2 и рис.3.
Примечание: