Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Операторы ветвления (if-else).




Операторы ветвления (if-else).

условный оператор В отличие от С++ выражение условия должно быть строго типа boolean. if(a==3) { } else { }

else – необязательная конструкция.

 

Вопрос: Чему будет равен n в этих случаях?

int n = 3, m = 4; int n = 3, m = 4;
Ответ: n = 3 Когда вы пишите логическую операцию состоящую из двух & & , || - это так называемые сокращенные логические операции. Она бинарная. У нее есть операнд слева и справа. Естественно все начинается слева. Если результат слева может полностью все определить результат всей операции, то правую часть никто даже и не трогает (не выполняет). Мы специально написали m < 0. Что тут получается? m < 0 – ЛОЖЬ. Если ложь при логическом умножении слева, то логический результат – ЛОЖЬ, и правую часть никто не исполняет. Ответ: n = 4  

 

a = ++n – увеличиваем, затем используем выражение (будет взято n, увеличино, и увеличенный результат положим в a)

a = n++ - используем выражение, а потом увеличиваем (будет взято n, присвоено a, а потом увеличино).

Что еще про if можно сказать?

У вас может m или n принимать значения от 1 до 10. И вы в каждой ситуации должны сделать какое-то конкретное действие. Вы можете написать 10 if подряд. А можем написать вложенное десятикратно условие.

 

if конструкции идущие подряд вложенное условие
Здесь как раз недостаток заключается в том, что каждое условие будет проверяться. Преимущество вложенного условия заключается в том, что он работает быстрее.

 

Если условий у нас 10 штук, то может быть вложенный мы еще напишем. А если их больше? Например, 100? То, тогда выбираем switch.

оператор выбора Позволяет выполнить операторы с метки int_constn до оператора break если целочисленное значение/значение перечисления exp1 тоже равно int_constn. Иначе выполняются операторы метки default, если она есть.   switch( exp1 ) {  case int_const1: ... break;  case int_const2: ... break;  case int_const3:  case int_const4: ... break;  default: ... }  

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

Как во всех ЯП в ЯП Java есть цикл while, есть цикл do…while, есть цикл for. Всё. Вот это стандартный набор ключевых слов, которые включены во всех Си-подобных языках. Здесь представлен цикл while. Условие проверяется до начала цикла. Если условие false, то цикл выполнять не нужно и уходим за тело цикла.

цикл с предусловием Тело цикла выполняется пока условие exp1 истинно. Условие вычисляется перед началом каждой итерации. Метки поддерживаются.   while ( exp1 ) exp2;   while ( exp1 ) {... }   label1: { while(exp1){          while(exp2) {                break label1; // или continue label1 } } }

 

 

А вот это условие do-while, где условие проверяется в конце. Делаем, делаем, делаем те действия, которые написаны, а потом проверяем условие. Если условие оказалось «ИСТИНА», то возвращаемся в начало цикла, и повторяем выполнение инструкции второй раз. А если «ЛОЖЬ», то выходим за тело цикла.

цикл с постусловием Тело цикла выполняется пока условие exp1 истинно. Условие вычисляется в конце каждой итерации. do {... } while (exp1);

 

До этого мы разобрали 2 цикла с while, а теперь разберем 2 цикла с for.

Первый цикл – это вообще классика для работы с массивами. Цикл очень удобен тем, когда я знаю, сколько мне нужно сделать итераций. Любой массив имеет фиксированное число элементов. Я могу создать переменную счетчик цикла.

цикл по элементам   // Type - тип элемента // it - локальная переменная цикла, куда сохраняется элемент // Expression - массив или Iterable   for (Type it = Expression. iterator(); it. hasNext(); ) { el = it. next(); Statement; }

 

А вот и последний цикл! ЦИКЛ ДЛЯ КОЛЛЕКЦИЙ!

Цикл для коллекций           for( String s: argv)               System. out. println(s);
цикл по элементам Цикл for имеет дополнительный синтаксис для обработки массивов и объектов реализующих интерфейс Iterable (например, коллекции и отображения).   // Type - тип элемента // it - локальная переменная цикла, куда сохраняется элемент // Expression - массив или Iterable   for (Type it: Expression) Statement;

 

 

Мои примерчики:

Рома Петя Ваня Катя Сережа Настя Толя

 

В Java есть такая особенность. Новые ключевые слова в Java очень неудобно добавлять. Что такое новое ключевое слово? Это значит нужно думать, как генерируется байт-код? Ведь что у нас сказано? Вы написали байт-код и он должен работать везде. Представьте, что я написал код. какие-то команды байт-кода у меня изменились, а что это означает? Теперь я должен переписать все виртаульные машины по всему миру, чтобы они понимали новые команды в байт-коде? Вы как себе это представляете? Я никак. Поэтому, изменить саму структуру байт-кода – это по-сути невозможно. Поэтому, зачем придумывать новые ключевые слова, если в байт-коде все тоже самое. Все. Они не стали так делать.

 

Цикл для коллекций. Понятно, что он генерируется в байт-коде скорее в очень похожем виде, что превращает любой другой язык. Но у вас появляется новый синтаксис, который позволяет вот так коротко и просто обойти все элементы не только массива, но и любой другой коллекции. Это цикл именно для коллекций.


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

 

Здесь, конечно, нужно знать, какой тип лежит в коллекции. Но и всё. Этот цикл сам пойдет по всем элементам. Он не будет пытаться брать лишнее. Он никого случайно за бортом не оставит. Он сам завершится, когда пройдет по всем элементам коллекции. Он является достаточно компактным вариантом и работает с разными типами коллекций. Это важно. Это удобно. Это универсально.

 

При всех своих плюсах, он, конечно, имеет недостатки, потому что он медленнее, чем классический for, потому что он разворачивается немного в другой синтаксис. Дело в том, что здесь, как раз написано. Если вы посмотрите, как это работает, то увидите, что этот цикл работает за счет того, что коллекция реализует специальный интерфейс Iterrable, и там, через методы этого интерфейса нужно попросить текущий элемент, потом сказать перейди на следующий элемент. Т. е. там работа происходит не как в классическом цикле for, а через вызов метода происходит обращение к элементам. А раз вызов метода, то уже имеем накладные расходы.

 

Он простенько выглядит на поверхности, но технически он реализован иначе. Про интерфейсы мы поговорим, но не сегодня.

 

Возьмем самый обычный цикл for. На наше счастье, массивы, которые есть в Java содержат внутри себя величину length. Любой массив уже внутри себя содержит свое собственное описание, а именно число элементов. Ставим знак «меньше», а не «меньше или равно». Почему? Мы же с нуля считаем. Если в массиве 100 элементов, то последний элемент будет 99. 99 меньше 100.

System. out. println(summa(1, 3, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6)); run: СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

Но так никто не пишет! Смотрите, как нужно писать! Будем использовать for для коллекций.

System. out. println(summa(1, 3, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6)); run: СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

Ради того, чтобы мы увидели упаковку и распаковку, приведем абсолютно безобразный пример.

System. out. println(summa(1, 3, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6)); run: СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

А зачем упаковывать в Object? У меня же там int’ы! Ну тогда упаковываем в Integer – есть же специальный тип.

System. out. println(summa(1, 3, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6)); run: СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...