Sdscompany.ru

Компьютерный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Операторы в java

9. Java — Основные операторы языка

Java предоставляет богатый набор операторов для управления переменными. Все операторы Java можно разделить на следующие группы:

  • арифметические операторы;
  • операторы сравнения;
  • побитовые операторы;
  • логические операторы;
  • операторы присваивания;
  • прочие операторы.

Содержание

Арифметические операторы

Арифметические операторы — используются в математических выражениях таким же образом, как они используются в алгебре. Предположим, целая переменная A равна 10, а переменная B равна 20. В следующей таблице перечислены арифметические операторы в Java:

Пример

Следующий простой пример показывает программно арифметические операторы. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:

Это произведет следующий результат:

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

Есть следующие операторы сравнения, поддерживаемые на языке Java. Предположим, переменная A равна 10, а переменная B равна 20. В следующей таблице перечислены реляционные операторы или операторы сравнения в Java:

Пример

Следующий простой пример показывает, программно побитовые операторы в Java. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:

Будет получен следующий результат:

Логические операторы

Предположим, логическая переменная A имеет значение true, а переменная B хранит false. В следующей таблице перечислены логические операторы в Java:

Пример

Следующий простой пример показывает, программно логические операторы в Java. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:

Это произведет следующий результат:

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

Существуют следующие операторы присваивания, поддерживаемые языком Java:

Пример

Следующий простой пример показывает, программно логические операторы в Java. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:

Будет получен следующий результат:

Прочие операторы

Есть несколько других операторов, поддерживаемых языком Java.

Тернарный оператор или условный оператор (?:)

Тернарный оператор — оператор, который состоит из трех операндов и используется для оценки выражений типа boolean. Тернарный оператор в Java также известен как условный оператор. Этот. Цель тернарного оператора или условного оператора заключается в том, чтобы решить, какое значение должно быть присвоено переменной. Оператор записывается в виде:

Пример

Ниже приведен пример:

Будет получен следующий результат:

Оператор instanceof

Оператор instanceof — проверяет, является ли объект определенного типа (типа класса или типа интерфейса) и используется только для переменных ссылочного объекта. Оператор instanceof записывается в виде:

Примеры

Если переменная ссылочного объекта в левой части оператора проходит проверку для класса/типа интерфейса на правой стороне, результатом будет значение true. Ниже приведен пример и описание оператора instanceof:

Будет получен следующий результат:

Этот оператор по-прежнему будет возвращать значение true, если сравниваемый объект является совместимым с типом на право назначения. Ниже приводится еще один пример:

Будет получен следующий результат:

Приоритет операторов в Java

Приоритет операторов определяет группирование терминов в выражении. Это влияет как вычисляется выражение. Некоторые операторы имеют более высокий приоритет, чем другие; например оператор умножения имеет более высокий приоритет, чем оператор сложения:

Например, x = 7 + 3 * 2. Здесь x присваивается значение 13, не 20, потому что оператор «*» имеет более высокий приоритет, чем «+», так что сначала перемножается «3 * 2», а затем добавляется «7».

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

Изучаем Java

Вы здесь: Главная >> Java-самоучитель >> Какие бывают операторы в языке Java

Обучающие курсы:

Какие бывают операторы в языке Java

Операторы в Java

В Java поддерживаются следующие арифметические операторы (табл. 2.4).

Таблица 2.4. Арифметические операторы

+ Сложение
— Вычитание
* Умножение
/ Деление
% Вычисление остатка
++ Инкремент
— Декремент
+= Присваивание со сложением
-= Присваивание с вычитанием
*= Присваивание с умножением
/= Присваивание с делением
%= Присваивание с вычислением остатка

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

Данные операторы указываются без пробела рядом со значением переменной. Если они стоят слева от переменной, то это называется префиксной формой инкремента или декремента, и это означает, что вначале к переменной прибавляется (или от нее отнимается) единица, а потом она используется в выражении. Если же инкремент (или декремент) ставится после имени переменной, то это называется постфиксной формой, и это означает, что переменная вначале используется в выражении, а затем к ней прибавляется (или от нее отнимается) единица.

Остальные пять операторов используются следующим образом:
а += b
аналогично записи:
а = а + b

Пример использования всех этих операторов приведен в листинге 2.9.

Листинг 2.9.
Пример использования арифметических операторов

class Example <
public static void main (String args[])
<
int a,b,c,d,e;
a=10
b= 11;
c= 12;
a+ = b; // a=21
a *= c; // a = 252
a = a — c; // a = 240
a -= c; // a = 228
d = 5;
e = 10;
System.out.println (++d); Выведется 6
System.out.println (d++); Выведется 6
System.out.println (e—) ; Выведется 10
System.out.println (—e) ; Выведется 8
>
>

Теперь рассмотрим битовые (поразрядные) операторы (табл. 2.5).

Таблица 2.5. Битовые (поразрядные) операторы

Оператор Описание
— Унарное отрицание
& Поразрядное И
| Поразрядное ИЛИ
^ Поразрядное исключающее ИЛИ
> Сдвиг битов вправо
>>> Сдвиг битов вправо с заполнением старшего бита нулем
&=, | =, ^=, >=, >>>= Присвоение с аналогичной операцией

С помощью данных операторов мы работаем над числами в их двоичном представлении. Рассмотрим, например, запись числа 15 в двоичной форме. 00001111

Первый оператор, называемый унарным отрицанием, превращает 0 в 1, а 1 в 0. Оператор поразрядного «и» создает в итоге единицу, если у обоих аналогичных битов сравниваемых чисел тоже 1. Если у них другое сочетание чисел, то итог будет 0. Например:
С = А & В

Предположим, А = 15 (00001111), а В равно 10 (00001010). Число С в таком случае будет равно 10 (00001010). Поразрядное «ИЛИ» означает следующее: если хотя бы один из битов равен 1, то итог тоже 1. Поразрядное исключающее «ИЛИ» возвращает 1, если только один из битов сравниваемых чисел равно 1. Следующие три оператора сдвигают биты влево на указанное число разрядов, причем сдвиг битов влево заполняет пустые позиции нулями. Пример использования этих операторов приведен в табл. 2.6 и листинге 2.10.

Читать еще:  Unable to minify javascript

Таблица 2.6. Операторы сдвигов битов

Операторы в java

public static void main(String args []) <

int a = 3; // 0+2+1 или двоичное 0011

int b = 6; // 4+2+0 или двоичное 0110

System.out.println(» a = » + binary[a]);

System.out.println(» b = » + binary[b]);

System.out.println(» ab = » + binary[c]);

System.out.println(» a^b = » + binary[e]);

Ниже при­веден результат, полученный при выполнении этой программы:

С: > Java BitLogic

Сдвиг и влево и вправо

Оператор >> означает в языке Java сдвиг вправо. Он перемещает все биты своего левого операнда вправо на число позиций, заданное правым операндом. Когда биты левого операнда выдвигаются за самую правую позицию слова, они теряются. При сдвиге вправо освобождающиеся старшие (левые) разряды сдви­гаемого числа заполняются предыдущим содержимым знакового разряда. Такое поведение называют расширением знакового разряда.

В следующей программе байтовое значение преобразуется в строку, содержащую его шестнадцатиричное представление. Обратите внимание — сдвинутое значение приходится маскировать, то есть логически умножать на значение 0 х 0 f, для того, чтобы очистить заполняемые в результате расширения знака биты и по­низить значение до пределов, допустимых при индексировании массива шестнадцатиричных цифр.

static public void main(String args[]) <

Ниже приведен результат работы этой программы:

Беззнаковый сдвиг вправо

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

static public void main(String args[]) <

Для этого примера переменную b можно было бы инициализировать произвольным отрицательным числом, мы использовали число с шест­надцатиричным представлением 0xf1. Переменной с присваивается ре­зультат знакового сдвига b вправо на 4 разряда. Как и ожидалось, рас­ширение знакового разряда приводит к тому, что 0xf1 превращается в 0xff. Затем в переменную d заносится результат беззнакового сдвига b вправо на 4 разряда. Можно было бы ожидать, что в результате d со­держит 0x0f, однако на деле мы снова получаем 0xff. Это — результат расширения знакового разряда, выполненного при автоматическом по­вышении типа переменной b до int перед операцией сдвига вправо. На­конец, в выражении для переменной е нам удается добиться желаемого результата — значения 0x0f. Для этого нам пришлось перед сдвигом вправо логически умножить значение переменной b на маску 0xff, очис­тив таким образом старшие разряды, заполненные при автоматическом повышении типа. Обратите внимание, что при этом уже нет необходи­мости использовать беззнаковый сдвиг вправо, поскольку мы знаем со­стояние знакового бита после операции AND.

С: > java ByteUShift

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

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

public static void main(String args[]) <

Результаты исполнения программы таковы:

С:> Java OpBitEquals

Для того, чтобы можно было сравнивать два значения, в Java имеется набор операторов, описывающих отношение и равенство. Список таких операторов приведен в таблице.

больше или равно

Булевы логические операторы

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

логическое И (AND)

И (AND) с присваиванием

логическое ИЛИ (OR)

ИЛИ (OR) с присваиванием

логическое исключающее ИЛИ (XOR)

исключающее ИЛИ (XOR) с присваиванием

оператор OR быстрой оценки выражений (short circuit OR)

оператор AND быстрой оценки выражений (short circuit AND)

логическое унарное отрицание (NOT)

тернарный оператор if-then-else

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

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

public static void main(String args[]) <

С: > Java BoolLogic

Операторы быстрой оценки логических выражений (short circuit logical operators)

Существуют два интересных дополнения к набору логических опера­торов. Это — альтернативные версии операторов AND и OR, служащие для быстрой оценки логических выражений. Вы знаете, что если первый операнд оператора OR имеет значение true, то независимо от значения второго операнда результатом операции будет величина true. Аналогично в случае оператора AND, если первый операнд — false, то значение вто­рого операнда на результат не влияет — он всегда будет равен false. Если вы в используете операторы && и || вместо обычных форм & и |, то Java не производит оценку правого операнда логического выражения, если ответ ясен из значения левого операнда. Общепринятой практикой является использование операторов && и || практически во всех случаях оценки булевых логических выражений. Версии этих операторов & и | применяются только в битовой арифметике.

Тернарный оператор if-then-else

Общая форма оператора if-then-use такова:

выражение1? выражение2: выражениеЗ

В качестве первого операнда — «выражение1» — может быть исполь­зовано любое выражение, результатом которого является значение типа boolean. Если результат равен true, то выполняется оператор, заданный вторым операндом, то есть, «выражение2». Если же первый операнд paвен false, то выполняется третий операнд — «выражениеЗ». Второй и третий операнды, то есть «выражение2» и «выражениеЗ», должны воз­вращать значения одного типа и не должны иметь тип void.

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

public static void main(String args[]) <

Основные операторы Java

В этой заметке мы рассмотрим основные конструкции языка Java — ветвления, циклы, исключения и т.п.

Условная операция

Java включает специальную троичную условную операцию:

expression1 ? expression2 : expression3

expression1 может быть любым выражением, которое производит boolean-значение . Если оно true , то вычисляется expression2 , иначе вычисляется expression3 .

Операторы выбора

Java поддерживает два оператора выбора: if и switch .
Оператор if имеет следующую общую форму:

Читать еще:  Метод abs java

где statementN – одиночный или составной (включенный в фигурные скобки, т.е. в блок) оператор маршрута N ( N – номер маршрута, для if он равен 1 или 2 ); condition – любое выражение, которое возвращает значение типа boolean . Предложение else – необязательное.
Оператор if работает так: если condition имеет значение true , то выполняется statement1 , иначе – выполняется statement2 (если он присутствует). Оба оператора вместе не будут выполняться ни в коем случае.
Пример:

Результат: Значение s = 0

Общую программную конструкцию, которая основана на последовательно­сти вложенных if , называют многозвенным ( ladder ) if-else-if . Эта конструкция выглядит так:

Операторы if выполняются сверху вниз. Как только одно из условий, управляющих оператором if , становится true , оператор, связанный с этим if , выполняется, а остальная часть многозвенной схемы пропускается. Если ни одно из условий не true , то будет выполнен последний оператор else . Заключительный else действует как условие по умолчанию: если все другие условные проверки не успешны, то выполняется последний оператор else . Если последний else отсутствует и все другие условия – false , то никакого действия выполняться не будет.

Оператор switch

Оператор switch – это Java-оператор множественного ветвления. Он переключает выполнение на различные части кода программы, основываясь на значении выражения, и часто обеспечивает лучшую альтернативу, чем длинный ряд операторов if-eise-if .
Switch отличается от if тем, что может проверять только равенство (своей переменной с case-метками), тогда как if может оценивать любой тип булевского выражения. То есть, switch отыскивает только соответст­вие между значением выражения и одной из его case-меток.
Общая форма оператора switch :

Здесь expression должно иметь тип byte , short , int ИЛИ char ; каждое value , указанное в операторах case , должно иметь тип, совместимый с типом выражения. Каждое значение case должно быть уникальной константой (а не переменной). Дублирование значений case недопустимо.
Оператор switch работает следующим образом. Значение выражения срав­нивается с каждым из указанных значений в case-операторах. Если соответ­ствие найдено, то выполняется кодовая последовательность, следующая по­сле этого оператора case . Если ни одна из case-констант не соответствует значению выражения, то выполняется оператор default . Однако оператор default необязателен. Если согласующихся case нет, и default не присутст­вует, то никаких дальнейших действий не выполняется.
Оператор break используется внутри switch , чтобы закончить последова­тельность операторов. Когда встречается оператор break , выполнение пере­дается к первой строке кода, которая следует за полным оператором switch . Он создает эффект досрочного выхода из switch .

Результат работы программы:

Нетрудно заметить, что на каждом проходе цикла выполняются операторы, связанные с case-меткой, которая соответствует переменной цикла i . Все другие case-ветви обходятся. После того как i становится больше трех, ни­какого соответствия case-меткам не возникает, поэтому выполняется опера­тор default .
Оператор break – необязательный. Если он пропускается, выполнение бу­дет продолжено со следующей case-метки. Иногда желательно иметь мно­жественные case-ветви без операторов break между ними. Например, рас­смотрим следующую программу:

Программа 5 раз выдаст сообщение «i меньше 5» , затем, 5 раз «i меньше 10» и 2 раза «i равно 10 или больше»

Операторы цикла

Операторы цикла (итераций) Java – это while , do while и for .

Цикл с предусловием (while)

Цикл while повторяет оператор или блок операторов, пока его управляющее выражение имеет значение true .

Condition может быть любым булевским выражением. Тело цикла будет выполняться до тех пор, пока условное выражение имеет значение true .

Цикл с постусловием (do while)

Цикл do while всегда выполняет свое тело по крайней мере один раз, потому что его условное выражение размещается в конце цикла. В цикле do while проверяется условие продолжения, а не окончания цикла.

Главное отличие между while и do while в том, что инструкция в цикле do while всегда выполняется не менее одного раза, даже если вычисленное выражение ложное с самого начала. В цикле while , если условие ложное в первый раз, инструкция никогда не выполнится. На практике do while используется реже, чем while .

Цикл со счетчиком (for)

Цикл for наиболее удобен в тех случаях, когда тело цикла должно быть выполнено определенное количество раз. Общая форма оператора for:

Цикл for работает следующим образом.
В начале работы цикла выполняется выражение initialization . В общем случае это выражение устанавливает значение переменной управления циклом, которая действует как счетчик. Важно понять, что выражение инициализации выполняется только один раз.
Затем оценивается condition . Оно должно быть булевским выражением и обычно сравнивает переменную управления циклом с некоторым граничным значением. Если это выражение – true , то отрабатывают операторы из тела цикла, если – false , цикл заканчивается.
Далее выполняется часть цикла iteration . Обычно это выражение, которое осуществляет инкрементные или декрементные операции с переменной управления циклом.
Затем цикл реализует итерации. В каждом проходе цикла – сначала оценивается условное выражение, потом выполняется тело цикла и затем – выражение iteration . Этот процесс повторяется до тех пор, пока управляющее выражение не станет false .
Вот, например, как можно запрограммировать печать целых чисел от 0 до 4 :

Часто переменная, которая управляет циклом for , необходима только для целей цикла и не используется в другом месте. Когда дело обстоит так, можно объявить переменную внутри инициализационной части for (как в примере выше). Важно помнить, что область действии переменной заканчивается там же, где и цикл for .
Чтобы позволить двум или большему числу переменных управлять циклом for , Java разрешает включать множественные операторы как в инициализационную, так и в итерационную части for-заголовка. Каждый оператор отделяется от следующего запятой. Вы можете определить несколько переменных внутри инструкции for , но они должны быть одного типа:

Пример вычисления факториала числа:

Результат вычислений:

Цикл по коллекции (for)

Цикл for имеет дополнительный синтаксис для обработки массивов и объектов реализующих интерфейс Iterable (например, коллекции и отображения).

Данный цикл можно переписать традиционным способом

Операторы перехода

Оператор break в Java используется в трех случаях. Во-первых, он заканчивает последовательность операторов в ветвях оператора switch . Во-вторых, его можно использовать для выхода из цикла. В-третьих, он может применяться как «цивилизованная» форма оператора безусловного перехода goto . В этом разделе объясняются два последних случая.
В следующем примере оператор break можно использовать для выхода из цикла while , который иначе выполнялся бы до бесконечности:

Читать еще:  Как открыть проект java в eclipse

Иногда полезно начать очередную итерацию цикла пораньше. То есть нужно продолжить выполнение цикла, но прекратить обработку остатка кода в его теле для данной частной итерации. На самом деле это – goto-переход мимо следующих операций тела в конец блока цикла. Такое действие выполняет оператор continue . В циклах while и do while оператор continue вызывает передачу управления непосредственно условному выражению, которое управляет циклом. В цикле for управление переходит сначала к итерационной части оператора for и затем к условному выражению.
В следующем примере оператор continue предотвращает ошибку деления на ноль:

Последний оператор управления – return . Он используется для явного возврата из метода, т. е. передает программное управление обратно в вызывающую программу. Оператор return относят к категории операторов перехода. Оператор return можно использовать в любом месте метода для выполнения перехода обратно в вызывающую этот метод программу. Оператор return немедленно заканчивает выполнение метода, в котором он находится.
Вот, например, как можно реализовать функцию, возводящую свой аргумент в целую степень n :

Эта функция вычисляет n-ю степень своего аргумента и возвращает полученное значение с помощью оператора return . Если после оператора return есть еще какие-то операторы, то они никогда не получат управления. Тип значения, возвращаемого оператором return , должен совпадать с типом, указанным в объявлении метода; если же тип метода объявлен с помощью ключевого слова void , то в операторе return можно не указывать никакого значения (то есть поставить точку с запятой сразу после ключевого слова return ). Таким образом, оператор return – это, с одной стороны, функциональная замена оператора goto на уровне методов, а с другой – способ возвращения результата работы метода.

Использование операторов try и catch

Операторы try и catch формируют небольшой программный модуль (точнее – пару связанных блоков). Область видимости catch-утверждения ограничена ближайшим предшествующим утверждением try . Оператор catch не может захватывать исключение, выброшенное другим try-оператором (кроме случая вложенных try-операторов, кратко описанных далее). Операторы, которые контролируются утверждением try , должны быть окружены фигурными скобками (т. е. они должны быть внутри блока). Нельзя использовать try с одиночным утверждением (без скобок). Целью хорошо сконструированного catch-предложения должно быть разрешение исключительной ситуации с последующим продолжением выполнения программы, как будто ошибка никогда не возникала.

Основные операторы Java

Дата добавления: 2015-06-12 ; просмотров: 3327 ; Нарушение авторских прав

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

Из к/ф «Забытая мелодия для флейты»

Все операторы Java можно разделить на четыре группы: арифметические, логиче- ские, побитовые и сравнения. Рассмотрим последовательно каждую группу опе- раторов. Начнем с арифметических. Эти операторы перечислены в табл. 1.2.

Таблица 1.2.Арифметические операторы Java

Эти операторы имеют некоторые особенности. В первую очередь обращаем вни- мание на оператор деления /. Если операндами являются целые числа, в ка- честве значения возвращается результат целочисленного деления. Рассмотрим последовательность команд:

int a=5,b=2; double x=a/b;

В данном примере переменная x получает значение 2.0, а не 2.5, как можно было бы ожидать. Дело в том, что сначала вычисляется выражение a/b. Поскольку

операнды целочисленные, выполняется целочисленное деление. И только по- сле этого полученное значение преобразуется к формату double и присваивается переменной x.

Для того чтобы при целочисленных операндах выполнялось обычное деление, перед выражением с оператором деления указывается в круглых скобках иден- тификатор типа double (или float). Например, так:

Теперь значение переменной x равно 2.5.

В Java, как и в С++, есть группа упрощенных арифметических операторов с присваиванием. Если op — один из операторов сложения, умножения, деления и вычисления остатка, то упрощенная форма этого оператора с присваиванием имеет вид op=. Это тоже бинарный оператор, как и оператор op, а команда вида x op=y является эквивалентом команды x=x op y.

Еще два исключительно полезных унарных оператора — операторы инкремента (++) и декремента (—). Действие оператора декремента сводится к увеличению на единицу значения операнда, а оператор декремента на единицу уменьшает операнд. Другими словами, команда x++ эквивалентна команде x=x+1, а команда x— эквивалентна команде x=x-1. У операторов инкремента и декремента есть не только представленная здесь постфиксная форма (оператор следует после опе- ранда: x++ или x—), но и префиксная (оператор располагается перед операндом:

++x или —x). С точки зрения действия на операнд нет разницы в том, префикс- ная или постфиксная формы оператора использованы. Однако если выражение с оператором инкремента или декремента является частью более сложного вы- ражения, различие в префиксной и постфиксной формах операторов инкремента и декремента существует. Если использована префиксная форма оператора, сна- чала изменяется значение операнда, а уже после этого вычисляется выражение. Если использована постфиксная форма оператора, сначала вычисляется выраже- ние, а затем изменяется значение операнда. Рассмотрим небольшой пример:

В этом случае после выполнения команд переменная n будет иметь значение 11, а переменная m — значение 10. На момент выполнения команды m=n++ значение переменной n равно 10. Поскольку в команде m=n++ использована постфиксная форма оператора инкремента, то сначала выполняется присваивание значения переменной m, а после этого значение переменной n увеличивается на единицу.

Иной результат выполнения следующих команд:

Обе переменные (n и m) в этом случае имеют значение 11. Поскольку в команде m=++n использована префиксная форма инкремента, сначала на единицу увели- чивается значение переменной n, а после этого значение переменной n присваи- вается переменной m.

Следующую группу образуют логические операторы. Операндами логических операторов являются переменные и литералы типа boolean. Логические опера- торы Java перечислены в табл. 1.3.

Таблица 1.3.Логические операторы Java

Ссылка на основную публикацию
Adblock
detector