Условные операторы: if, ‘?’

Оператор break

Оператор break  позволяет прервать текущее выполнение switch  или  цикла for , while  и do-while  и перейти к следующему оператору после него. Примеры:


Java

int n = 0; while (true) { System.out.println(n); if (n == 10) break; n++; }

1 2 3 4 5 6

intn=;

while(true){

System.out.println(n);

if(n==10)break;

n++;

}

Java

int n = 0; do { System.out.println(n); if (n == 10) break; n++; } while (true);

1 2 3 4 5 6

intn=;

do{

System.out.println(n);

if(n==10)break;

n++;

}while(true);

Java

for (int n = 0; 😉 { System.out.println(n); if (n == 10) break; n++; }

1 2 3 4 5

for(intn=;;){

System.out.println(n);

if(n==10)break;

n++;

}

Все приведённые выше примеры выводят в консоль числа от 0 до 10.

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

Java

// метка для внешнего цикла. outer_for: for (int n = 0; n < 10; n++) { //… // метка для внутреннего цикла inner_for: for (int m = 0; m < 10; m++) {

// прерываем внешний цикл для n == 2 и m ==4 if ((n == 9) && (m == 4)) break outer_for;

// прерываем внутренний цикл для n == 7 и m == 2 if ((n == 7) && (m == 2)) break;

// можно прервать внутренний цикл и по метке. if ((n == 9) && (m % 2 == 1)) break inner_for;

System.out.println(«n=» + n + «; m=» + m); } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

// метка для внешнего цикла.

outer_for

for(intn=;n<10;n++){

//…

// метка для внутреннего цикла

inner_for

for(intm=;m<10;m++){

// прерываем внешний цикл для n == 2 и m ==4

if((n==9)&&(m==4))breakouter_for;

// прерываем внутренний цикл для n == 7 и m == 2

if((n==7)&&(m==2))break;

// можно прервать внутренний цикл и по метке.

if((n==9)&&(m%2==1))breakinner_for;

System.out.println(«n=»+n+»; m=»+m);

}

}

The Arithmetic Operators

Arithmetic operators are used in mathematical expressions in the same way that they are used in algebra. The following table lists the arithmetic operators −

Assume integer variable A holds 10 and variable B holds 20, then −

Operator Description Example
&plus; (Addition) Adds values on either side of the operator. A &plus; B will give 30
— (Subtraction) Subtracts right-hand operand from left-hand operand. A — B will give -10
&ast; (Multiplication) Multiplies values on either side of the operator. A &ast; B will give 200
/ (Division) Divides left-hand operand by right-hand operand. B / A will give 2
% (Modulus) Divides left-hand operand by right-hand operand and returns remainder. B % A will give 0
&plus;&plus; (Increment) Increases the value of operand by 1. B&plus;&plus; gives 21
— (Decrement) Decreases the value of operand by 1. B— gives 19

Оператор for

Оператор for  представляет собой компактную форму итерации по диапазону чисел. Его синтаксис:

for (<инициализация>; <условие>; <инкремент>) <оператор1>;

1 2

for (<инициализация>; <условие>; <инкремент>)     <оператор1>;

Или для блока операторов (согласно соглашению о кодировании в Java рекомендуется использовать этот вариант даже для случая одного оператора):

for (<инициализация>; <условие>; <инкремент>) { <оператор1>; <оператор2>; … <операторN>; }

1 2 3 4 5 6

for (<инициализация>; <условие>; <инкремент>) {     <оператор1>;     <оператор2>;     …     <операторN>; }

Выражение <инициализация>  выполняется только один раз перед началом итерации. Переменные, объявленные в <инициализация>  действуют только внутри цикла for , включая <инициализация> , <условие>  и <инкремент>.

Выражение <условие>  выполняется перед каждым циклом итерации. Блок операторов или одиночный оператор выполняются только тогда, когда <условие>  вернуло true . Если <условие>  возвращает false , то выполнение цикла for  завершается.

Выражение <инкремент>  выполняется после каждого цикла перед проверкой выражения <условие> . Его обычно используют для увеличения или уменьшения значения.

Любое из выражений <инициализация> , <условие> , <инкремент>  можно опустить. Можно даже вообще сделать цикл for  без инициализации, условия, инкремента и оператора/блока операторов:

Java

// Бесконечный цикл for (;;);

1 2

// Бесконечный цикл

for(;;);

Пример использования цикла for  для вывода значений от 0 до 10:

Java

for (int n = 0; n <= 10; n++) { System.out.println(n); }

1 2 3

for(intn=;n<=10;n++){

System.out.println(n);

}

В <инициализация>  и в <инкремент>  можно указывать несколько выражений инициализации и несколько инкрементов. В этом случае они указываются через запятую и вычисляются слева направо:

Java

for (int n = 0, m = 3; n <= 10; n++, m—) { System.out.println(«n=» + n + «; m=» + m); }

1 2 3

for(intn=,m=3;n<=10;n++,m—){

System.out.println(«n=»+n+»; m=»+m);

}

Существует ещё специальная форма for для обхода по массивам и коллекциям:

Java

int[] myarray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (int n : myarray) { System.out.println(n); }

1 2 3 4

intmyarray={,1,2,3,4,5,6,7,8,9,10};

for(intnmyarray){

System.out.println(n);

}

Выведет в консоль следующее:

0 1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10 11

1 2 3 4 5 6 7 8 9 10

Java Conditions and If Statements

Java supports the usual logical conditions from mathematics:

  • Less than: a < b
  • Less than or equal to: a <= b
  • Greater than: a > b
  • Greater than or equal to: a >= b
  • Equal to a == b
  • Not Equal to: a != b

You can use these conditions to perform different actions for different decisions.

Java has the following conditional statements:

  • Use to specify a block of code to be executed, if a specified condition is true
  • Use to specify a block of code to be executed, if the same condition is false
  • Use to specify a new condition to test, if the first condition is false
  • Use to specify many alternative blocks of code to be executed

Оператор continue

Оператор continue  позволяет пропустить текущую итерацию и перейти сразу к следующей итерации цикла for , while  или do-while. Он тоже бывает с меткой и без метки.

Пример без метки:

Java

for (int n = 0; n <= 10; n++) { if (n % 2 == 0) continue; System.out.println(n); }

1 2 3 4

for(intn=;n<=10;n++){

if(n%2==)continue;

System.out.println(n);

}

Выведет в консоль:

1 3 5 7 9

1 2 3 4 5

1 3 5 7 9

Пример с меткой:

Java

// … outer_label: for (int n = 4; n <= 9; n++) { int m = 3; while (m <= 5) { // Если остаток от деления n на m равен 0, // то переходим к следующей итерации // цикла outer_label if (n % m == 0) continue outer_label; System.out.println(«n=» + n + «; m=» + m); m++; } }

1 2 3 4 5 6 7 8 9 10 11 12 13

// …

outer_label

for(intn=4;n<=9;n++){

intm=3;

while(m<=5){

// Если остаток от деления n на m равен 0,

// то переходим к следующей итерации

// цикла outer_label

if(n%m==)continueouter_label;

System.out.println(«n=»+n+»; m=»+m);

m++;

}

}

Это выведет в консоль:

n=4; m=3 n=5; m=3 n=5; m=4 n=7; m=3 n=7; m=4 n=7; m=5 n=8; m=3

1 2 3 4 5 6 7

n=4; m=3 n=5; m=3 n=5; m=4 n=7; m=3 n=7; m=4 n=7; m=5 n=8; m=3

Оператор do-while

Оператор do-while  похож на оператор while, но он сначала выполняет операторы, а лишь потом проверяет условие, таким образом оператор или блок операторов выполнятся хотя бы один раз.

Примеры:

Java

// вывод чисел от 0 до 10 int x = 0; do { System.out.println(x); x++; } while (x <= 10);

1 2 3 4 5 6

// вывод чисел от 0 до 10

intx=;

do{

System.out.println(x);

x++;

}while(x<=10);

Java

// Условие ложно изначально, // но выведется 0, так как // сначала будет выполняться // блок операторов, а лишь затем // проверяться условие x = 0; do { System.out.println(x); x++; } while (x < 0);

1 2 3 4 5 6 7 8 9 10

// Условие ложно изначально, // но выведется 0, так как // сначала будет выполняться // блок операторов, а лишь затем // проверяться условие


x=;

do{

System.out.println(x);

x++;

}while(x<);

7.2 Приоритет операций в Java

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

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

Вот как выглядит таблица со всеми операторами Java:

Категория Оператор Ассоциативность
Постфикс Слева направо
Унарный    Справа налево
Мультипликативный Слева направо
Аддитивный Слева направо
Сдвиг Слева направо
Реляционный   Слева направо
Равенство Слева направо
Побитовое (AND) Слева направо
Исключающее (XOR) Слева направо
Побитовое (OR) Слева направо
Логическое (AND) Слева направо
Логическое (OR) Слева направо
Условный Справа налево
Присваивание Справа налево
Запятая Слева направо

В верхней строке идут самые приоритетные операторы. Круглые скобки используются для явной установки приоритета. Квадратные скобки используются для индексирования переменной-массива. Оператор используется для получения полей и методов у ссылки на объект или класс.

Чем ниже операторы расположены в таблице, тем ниже их приоритет.

Если вы используете несколько операторов в вашем выражении, не ленитесь: ставьте скобки.

Да, в Java можно написать что-то типа , но так делать не стоит. Вы пишете код не только для компилятора, но и для других программистов. Чем код читабельнее, тем лучше.

6.4 Двойные фигурные скобки

Помните быструю инициализацию массива?

Мы там просто перечисляли значение в фигурных скобках:

Создателям Java понравилась идея использовать фигурные скобки для упрощенной записи данных в массив. Но как быть с коллекциями?

Для коллекций тоже хватило фантазии: разрешили использовать трюк с двойными фигурными скобками.

С сахаром Без сахара

Если компилятор встретит код в примере слева, он преобразует его в код справа.

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

Но если вы встретите в чьем-то проекте такой код, не удивляйтесь

3.1 Пакеты

В стандартных Java-программах очень много классов. Сколько? Тысячи, десятки тысяч. А если еще посчитать, что программа использует различные библиотеки, которые содержат классы, написанные другими программистами, то количество классов легко может исчисляться миллионами!

Для всех этих миллионов, да и просто тысяч классов невозможно придумать уникальные имена.

Нет, ну конечно можно придумать имена типа , , но если мы говорим о выборе для каждого класса хорошего имени, которое облегчает понимание этого класса (как для строк, например), то даже тысяча уникальных имен — это большой труд.

Поэтому в Java все классы сгруппированы по пакетам.

Классы и их пакеты в Java по своей сути очень напоминают файлы и папки на компьютере.

Например, если вам нужно хранить на компьютере 10 документов, вы скорее всего просто будете хранить их в одной папке. А если документов тысячи (например, хранилище всех документов компании)?

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

Фактически в Java это все и было сделано для классов.

Файлы с классами хранятся в разных директориях (папках), и полное название папки класса со всеми подпапками называется пакетом класса. Пример:

Путь к файлу Имя пакета Имя класса

Имя пакета, в отличие от имени папки, пишется через точку. Т.е. если папка была , ей будет соответствовать пакет .

The Assignment Operators

Following are the assignment operators supported by Java language −

Operator Description Example
= Simple assignment operator. Assigns values from right side operands to left side operand. C = A &plus; B will assign value of A &plus; B into C
&plus;= Add AND assignment operator. It adds right operand to the left operand and assign the result to left operand. C &plus;= A is equivalent to C = C &plus; A
-= Subtract AND assignment operator. It subtracts right operand from the left operand and assign the result to left operand. C -= A is equivalent to C = C – A
&ast;= Multiply AND assignment operator. It multiplies right operand with the left operand and assign the result to left operand. C &ast;= A is equivalent to C = C &ast; A
/= Divide AND assignment operator. It divides left operand with the right operand and assign the result to left operand. C /= A is equivalent to C = C / A
%= Modulus AND assignment operator. It takes modulus using two operands and assign the result to left operand. C %= A is equivalent to C = C % A
<<= Left shift AND assignment operator. C <<= 2 is same as C = C << 2
>>= Right shift AND assignment operator. C >>= 2 is same as C = C >> 2
&= Bitwise AND assignment operator. C &= 2 is same as C = C & 2
^= bitwise exclusive OR and assignment operator. C ^= 2 is same as C = C ^ 2
|= bitwise inclusive OR and assignment operator. C |= 2 is same as C = C | 2

The Relational Operators

There are following relational operators supported by Java language.

Assume variable A holds 10 and variable B holds 20, then −

Operator Description Example
== (equal to) Checks if the values of two operands are equal or not, if yes then condition becomes true. (A == B) is not true.
!= (not equal to) Checks if the values of two operands are equal or not, if values are not equal then condition becomes true. (A != B) is true.
> (greater than) Checks if the value of left operand is greater than the value of right operand, if yes then condition becomes true. (A > B) is not true.
< (less than) Checks if the value of left operand is less than the value of right operand, if yes then condition becomes true. (A < B) is true.
>= (greater than or equal to) Checks if the value of left operand is greater than or equal to the value of right operand, if yes then condition becomes true. (A >= B) is not true.
<= (less than or equal to) Checks if the value of left operand is less than or equal to the value of right operand, if yes then condition becomes true. (A <= B) is true.

Overview

The ternary conditional operator ?: allows us to define expressions in Java. It’s a condensed form of the if-else statement that also returns a value.

In this tutorial, we’ll learn when and how to use a ternary construct. We’ll start by looking at its syntax followed by exploring its usage.

2. Syntax

The ternary operator ?: in Java is the only operator which accepts three operands:

The very first operand must be a boolean expression, the second and the third operands can be any expression that returns some value. The ternary construct returns expression1 as an output if the first operand evaluates to true, expression2 otherwise.

3. Ternary Operator Example

Let’s consider the below if-else construct:

In the above code, we have assigned a value to msg based on the conditional evaluation of num. We can make this code more readable and safe by easily replacing the if-else statement with a ternary construct:

4. Expression Evaluation

When using a Java ternary construct, only one of the right-hand side expressions i.e. either expression1 or expression2 is evaluated at runtime.

We can test that out by writing a simple JUnit test case:

Our boolean expression 12 > 10 always evaluates to true, so the value of exp2 remained as-is. Similarly, let’s consider what happens for a false condition:

The value of exp1 remained untouched, and the value of exp2 was incremented by 1.

5. Nesting Ternary Operator

It’s possible for us to nest our ternary operator to any number of levels of our choice. So the construct:

is valid in Java. To improve the readability of the above code, we can use braces (), wherever necessary:

However, please note that it’s not recommended to use such deeply nested ternary constructs in the real world. This is so as it makes the code less readable and difficult to maintain.

6. Conclusion

In this quick tutorial, we learned about the ternary operator in Java. It isn’t possible to replace every if-else construct with a ternary operator. However, it’s a great tool for some cases and makes our code much shorter and readable.

As usual, the entire source code is available over on Github.

7.1 Булевы операции

Операторы и можно применять не только к числам, но и к выражениям типа boolean.

Однако, как вы уже знаете, для логических выражений есть операторы и . Что же нам даст использование вместо и использование вместо ? Есть ли вообще в этом смысл? Оказывается, есть. Иногда.

Логические операторы и выполняются слева направо по так называемому ленивому принципу.


Если  равно , нет смысла вычислять  и : результат все равно будет .

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

То же самое и для логического оператора :

Если равно , нет смысла вычислять и : результат все равно будет .

Это важный момент, который позволяет писать вещи вида:

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

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

Вот это все к чему:

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

The Bitwise Operators

Java defines several bitwise operators, which can be applied to the integer types, long, int, short, char, and byte.

Bitwise operator works on bits and performs bit-by-bit operation. Assume if a = 60 and b = 13; now in binary format they will be as follows −

a = 0011 1100

b = 0000 1101

——————

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a  = 1100 0011

The following table lists the bitwise operators −

Assume integer variable A holds 60 and variable B holds 13 then −

Operator Description Example
& (bitwise and) Binary AND Operator copies a bit to the result if it exists in both operands. (A & B) will give 12 which is 0000 1100
| (bitwise or) Binary OR Operator copies a bit if it exists in either operand. (A | B) will give 61 which is 0011 1101
^ (bitwise XOR) Binary XOR Operator copies the bit if it is set in one operand but not both. (A ^ B) will give 49 which is 0011 0001
~ (bitwise compliment) Binary Ones Complement Operator is unary and has the effect of ‘flipping’ bits. (~A ) will give -61 which is 1100 0011 in 2’s complement form due to a signed binary number.
<< (left shift) Binary Left Shift Operator. The left operands value is moved left by the number of bits specified by the right operand. A << 2 will give 240 which is 1111 0000
>> (right shift) Binary Right Shift Operator. The left operands value is moved right by the number of bits specified by the right operand. A >> 2 will give 15 which is 1111
>>> (zero fill right shift) Shift right zero fill operator. The left operands value is moved right by the number of bits specified by the right operand and shifted values are filled up with zeros. A >>>2 will give 15 which is 0000 1111

Итераторы

Последнее обновление: 25.04.2018

Одним из ключевых методов интерфейса Collection является метод . Он возвращает итератор — то есть объект, реализующий интерфейс Iterator.

Интерфейс Iterator имеет следующее определение:

public interface Iterator <E>{
    
	E next();
	boolean hasNext();
	void remove();
}

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

Используем итератор для перебора коллекции ArrayList:

import java.util.*;

public class Program {

    public static void main(String[] args) {
        
        ArrayList<String> states = new ArrayList<String>();
        states.add("Germany");
        states.add("France");
        states.add("Italy");
        states.add("Spain");
        
        Iterator<String> iter = states.iterator();
        while(iter.hasNext()){
        
            System.out.println(iter.next());
        }
    }
}

Интерфейс Iterator предоставляет ограниченный функционал. Гораздо больший набор методов предоставляет другой итератор — интерфейс ListIterator. Данный итератор используется классами, реализующими интерфейс , то есть классами LinkedList, ArrayList и др.

Интерфейс ListIterator расширяет интерфейс Iterator и определяет ряд дополнительных методов:

  • void add(E obj): вставляет объект obj перед элементом, который должен быть возвращен следующим вызовом

  • boolean hasNext(): возвращает , если в коллекции имеется следующий элемент, иначе возвращает false

  • boolean hasPrevious(): возвращает , если в коллекции имеется предыдущий элемент, иначе возвращает false

  • E next(): возвращает текущий элемент и переходит к следующему, если такого нет, то генерируется исключение

  • E previous(): возвращает текущий элемент и переходит к предыдущему, если такого нет, то генерируется исключение

  • int nextIndex(): возвращает индекс следующего элемента. Если такого нет, то возвращается размер списка

  • int previousIndex(): возвращает индекс предыдущего элемента. Если такого нет, то возвращается число -1

  • void remove(): удаляет текущий элемент из списка. Таким образом, этот метод должен быть вызван после методов или , иначе будет сгенерировано исключение

  • void set(E obj): присваивает текущему элементу, выбранному вызовом методов или , ссылку на объект obj

Используем ListIterator:

import java.util.*;

public class Program {

    public static void main(String[] args) {
        
        ArrayList<String> states = new ArrayList<String>();
        states.add("Germany");
        states.add("France");
        states.add("Italy");
        states.add("Spain");
        
        ListIterator<String> listIter = states.listIterator();
        
        while(listIter.hasNext()){
        
            System.out.println(listIter.next());
        }
        // сейчас текущий элемент - Испания
        // изменим значение этого элемента
        listIter.set("Португалия");
        // пройдемся по элементам в обратном порядке
        while(listIter.hasPrevious()){
        
            System.out.println(listIter.previous());
        }    
    }
}

НазадВперед

1.1 История версий Java

История Java начинается в 1991 году, когда группа программистов компании Sun решила создать язык для маленьких устройств: телевизионных пультов, кофеварок, тостеров, банковских карт, и т.д.

Производители подобных устройств использовали очень разные процессоры для контроллеров своих изделий, поэтому очень важно было не привязываться к архитектуре конкретного процессора или ОС. Создатели Java решили разбить проблему на две части: их программы будут компилироваться не в машинный код конкретного контроллера, а в специальный промежуточный код

Он, в свою очередь, выполняется специальной программой — виртуальной машиной

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

Большинство программистов называют компьютер машиной.

За основу языка Java был взяли язык C++, который очень сильно упростили и стандартизировали. Если в C++ что-то можно было сделать десятью способами, то в Java оставили только один. Чем-то это было похоже на переход от иероглифов к алфавиту.

Первую версию Java выпустили в 1996 году. С тех пор Java начала свое победное шествие по всему миру, что, в свою очередь, стимулировало развитие самого языка. Сейчас на Java написаны миллионы библиотек и миллиарды строк кода, а новые версии Java выходят каждые 6 месяцев:

Название Год выпуска Количество классов
JDK 1.0 1996 211
JDK 1.1 1997 477
J2SE 1.2 1998 1,524
J2SE 1.3 2000 1,840
J2SE 1.4 2002 2,723
J2SE 5.0 2004 3,279
Java SE 6 2006 3,793
Java SE 7 2011 4,024
Java SE 8 2014 4,240
Java SE 9 2017 6,005
Java SE 10 2018 6,002
Java SE 11 2018 4,411
Java SE 12 2019 4,433
Java SE 13 2019 4,515

Хоть версии Java выпускались регулярно, с точки зрения программистов, они имели разную значимость: Java развивалась скачками.

Условные операторы в Java

Java использует булевские (логические) переменные, чтобы оценивать условия. Значение true или false возвратится, после того как выражение будет оценено. Например:

int a = 4; boolean b = a == 4; if (b) { System.out.println(«It’s true!»); }

1 2 3 4 5

inta=4;

booleanb=a==4;

if(b){

System.out.println(«It’s true!»);

}

Конечно, мы обычно не присваиваем условное выражение булевской переменной, мы просто используем короткую версию:

int a = 4; if (a == 4) { System.out.println(«Ohhh! So a is 4!»); }

1 2 3 4

inta=4;

if(a==4){

System.out.println(«Ohhh! So a is 4!»);

}

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

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


int a = 4; int b = 5; boolean result; result = a < b; // истина result = a > b; // ложь result = a <= 4; // меньше или равно — истина result = b >= 6; // больше или равно — ложь result = a == b; // равно — ложь result = a != b; // неравно — истина result = a > b || a < b; // логическое ИЛИ — истина result = 3 < a && a < 6; // логическое И — истина result = !result; // Логическое НЕ — ложь

1 2 3 4 5 6 7 8 9 10

inta=4;

intb=5;

booleanresult;

result=a<b;// истина result = a > b;  // ложь

result=a<=4;// меньше или равно — истина result = b >= 6;  // больше или равно — ложь

result=a==b;// равно — ложь

result=a!=b;// неравно — истина

result=a>b||a<b;// логическое ИЛИ — истина

result=3<a&&a<6;// логическое И — истина

result=!result;// Логическое НЕ — ложь

Оператор if — else

Синтаксис оператора if — else довольно прост:

if (a == b) { // Тело метода. Выполняется если a и b равны. }

1 2 3

if(a==b){

// Тело метода. Выполняется если a и b равны.

}

Так же мы можем добавить еще одно выражение, на случай, если условие не выполняется:

if (a == b) { // Мы уже знаем эту часть } else { // a и b не равны… :/ }

1 2 3 4 5

if(a==b){

// Мы уже знаем эту часть

}else{

// a и b не равны… :/

}

Если тело метода можно разместить в одну строку, можно не использовать { }

if (a == b) System.out.println(«Yeah!»); else System.out.println(«Ohhh…»);

1 2

if(a==b)System.out.println(«Yeah!»);

elseSystem.out.println(«Ohhh…»);

Или

if (a == b) System.out.println(«Another line Wow!»); else System.out.println(«Double rainbow!»);

1 2 3 4

if(a==b)

System.out.println(«Another line Wow!»);

else

System.out.println(«Double rainbow!»);

Несмотря на то, что такой метод мог бы сделать ваш код короче, мы строго рекомендуем новичкам не использовать короткую версию условного оператора

Другая сторона if

Есть еще один способ записать if — else в одну строку — с помощью оператора ? :

int a = 4; int result = a == 4 ? 1 : 8; // result будет равен 1 // Или обычная форма записи: int result; if (a == 4) { result = 1; } else { result = 8; }

1 2 3 4 5 6 7 8 9 10

inta=4;

intresult=a==4?18;

// result будет равен 1 // Или обычная форма записи:

intresult;

if(a==4){

result=1;

}else{

result=8;

}

Опять же, мы не рекомендуем новичкам использовать эту версию if.

Операторы == и equals

Оператор == работает немного по-другому на объектах, нежели на примитивах. Когда вы используем объекты и хотите проверить, равны ли они, оператор == скажет что они равны, только если объекты одинаковы, но если вы хотите проверить их на логическое соответствие, используйте метод equals. Например:

String a = new String(«Wow»); String b = new String(«Wow»); String sameA = a;

boolean r1 = a == b; // Ложь, так как a и b не один и тот же объект boolean r2 = a.equals(b); // Истина, так как a и b логически равны boolean r3 = a == sameA; // Истина, так как a и sameA действительно один и тот же объект

1 2 3 4 5 6 7

Stringa=newString(«Wow»);

Stringb=newString(«Wow»);

StringsameA=a;

booleanr1=a==b;// Ложь, так как a и b не один и тот же объект

booleanr2=a.equals(b);// Истина, так как a и b логически равны

booleanr3=a==sameA;// Истина, так как a и sameA действительно один и тот же объект

Попрактикуйтесь в написании кода, прежде чем перейти к следующему уроку.

Задачи

  1. Создать программу, которая будет проверять попало ли случайно выбранное из отрезка целое число в интервал (25;100) и сообщать результат на экран.Примеры работы программы:

    Число 113 не содержится в интервале (25,100)

    1 Число113несодержитсявинтервале(25,100)

    Число 72 содержится в интервале (25,100)

    1 Число72содержитсявинтервале(25,100)

    Число 25 не содержится в интервале (25,100)

    1 Число25несодержитсявинтервале(25,100)

    Число 155 не содержится в интервале (25,100)

    1 Число155несодержитсявинтервале(25,100)
  2. Создать программу, выводящую на экран случайно сгенерированное трёхзначное натуральное число и его наибольшую цифру.Примеры работы программы:

    В числе 208 наибольшая цифра 8

    1 Вчисле208наибольшаяцифра8

    В числе 774 наибольшая цифра 7

    1 Вчисле774наибольшаяцифра7

    В числе 613 наибольшая цифра 6

    1 Вчисле613наибольшаяцифра6
  3. В три переменные a, b и c явно записаны программистом три целых попарно неравных между собой числа. Создать программу, которая переставит числа в переменных таким образом, чтобы при выводе на экран последовательность a, b и c оказалась строго возрастающей.

    Числа в переменных a, b и c: 3, 9, -1 Возрастающая последовательность: -1, 3, 9

    1 2

    Числавпеременныхa,bиc3,9,-1

    Возрастающаяпоследовательность-1,3,9

    Числа в переменных a, b и c: 2, 4, 3 Возрастающая последовательность: 2, 3, 4

    1 2

    Числавпеременныхa,bиc2,4,3

    Возрастающаяпоследовательность2,3,4

    Числа в переменных a, b и c: 7, 0, -5 Возрастающая последовательность: -5, 0, 7

    1 2

    Числавпеременныхa,bиc7,,-5

    Возрастающаяпоследовательность-5,,7

< Предыдущая       Оглавление       Следующая >

Precedence of Java Operators

Operator precedence determines the grouping of terms in an expression. This affects how an expression is evaluated. Certain operators have higher precedence than others; for example, the multiplication operator has higher precedence than the addition operator −

For example, x = 7 &plus; 3 &ast; 2; here x is assigned 13, not 20 because operator &ast; has higher precedence than &plus;, so it first gets multiplied with 3 &ast; 2 and then adds into 7.

Here, operators with the highest precedence appear at the top of the table, those with the lowest appear at the bottom. Within an expression, higher precedence operators will be evaluated first.

Category Operator Associativity
Postfix expression++ expression— Left to right
Unary ++expression –-expression +expression –expression ~ ! Right to left
Multiplicative * / % Left to right
Additive + — Left to right
Shift > >>> Left to right
Relational = instanceof Left to right
Equality == != Left to right
Bitwise AND & Left to right
Bitwise XOR ^ Left to right
Bitwise OR | Left to right
Logical AND && Left to right
Logical OR || Left to right
Conditional ?: Right to left
Assignment = += -= *= /= %= ^= |= >= >>>= Right to left

Java Nested if..else Statement

In Java, it is also possible to statements inside a statement. It’s called nested statement.

Here’s a program to find largest of 3 numbers:

Example 4: Nested if…else Statement

Output:

The largest number is 4.5

Note: In the above programs, we have assigned the value of variables ourselves to make this easier. However, in real-world applications, these values may come from user input data, log files, form submission, etc.

Java provides a special operator called ternary operator, which is a kind of shorthand notation of if…else statement. To learn about the ternary operator, visit Java Ternary Operator.

6.3 Опускание типа — оператор diamond:

Еще до появления оператора var были попытки научить компилятор выводить типы коллекций. Согласитесь, эта запись выглядит немного избыточно:

Начиная с седьмой версии Java, при записи типа коллекции можно было опускать (не писать) тип элементов коллекции, если он указан при объявлении переменной. Т.е. код выше можно записать немного в сокращенном виде:

Как вы видите, второй раз писать тип String больше не нужно. Не так круто, как с оператором var, но в свое время и это казалось достижением.

Пустые треугольные скобки в типе коллекции получили название оператор diamond: две скобки отдаленно напоминали силуэт бриллианта.

Использовать одновременно var и оператор diamond не выйдет, так написать нельзя:

Информации о типе, который хранит коллекция, совсем не остается.


С этим читают