И наконец, если ничего из этого не верно, то 'Какой необычный возраст!'.
То же самое через if..else:
if (age < 3) {
message = 'Здравствуй, малыш!';
} else if (age < 18) {
message = 'Привет!';
} else if (age < 100) {
message = 'Здравствуйте!';
} else {
message = 'Какой необычный возраст!';
}
Нетрадиционное использование „?“
Иногда оператор вопросительный знак '?' используют как замену if:
var company = prompt('Какая компания создала JavaScript?', '');
(company == 'Netscape') ?
alert('Да, верно') : alert('Неправильно');
Работает это так: в зависимости от условия, будет выполнена либо первая, либо вторая часть после '?'.
Результат выполнения не присваивается в переменную, так что пропадёт (впрочем, alert ничего не возвращает).
Рекомендуется не использовать вопросительный знак таким образом.
Несмотря на то, что с виду такая запись короче if, она является существенно менее читаемой.
Вот, для сравнения, то же самое с if:
var company = prompt('Какая компания создала JavaScript?', '');
if (company == 'Netscape') {
alert('Да, верно');
} else {
alert('Неправильно');
}
При чтении кода глаз идёт вертикально и конструкции, занимающие несколько строк, с понятной вложенностью, воспринимаются гораздо легче.
Возможно, вы и сами почувствуете, пробежавшись глазами, что синтаксис с if более прост и очевиден чем с оператором '?'.
Смысл оператора '?' - вернуть то или иное значение, в зависимости от условия.
Пожалуйста, используйте его по назначению, а для выполнения разных веток кода есть if.
if (строка с нулём)
важность: 5
Выведется ли alert?
if ("0") {
alert( 'Привет' );
}
решение
Проверка стандарта
важность: 2
Используя конструкцию if..else, напишите код, который будет спрашивать: «Каково «официальное» название JavaScript?».
Если посетитель вводит «ECMAScript», то выводить «Верно!», если что-то другое - выводить «Не знаете? «ECMAScript»!».
Блок-схема:
Проверка логина
важность: 3
Напишите код, который будет спрашивать логин (prompt).
Если посетитель вводит «Админ», то спрашивать пароль, если нажал отмена (escape) - выводить «Вход отменён», если вводит что-то другое - «Я вас не знаю».
Пароль проверять так. Если введён пароль «Чёрный Властелин», то выводить «Добро пожаловать!», иначе - «Пароль неверен», при отмене - «Вход отменён».
Блок-схема:
Для решения используйте вложенные блоки if. Обращайте внимание на стиль и читаемость кода.
Запустить демо
решение
Перепишите 'if' в '?'
важность: 5
Перепишите if с использованием оператора '?':
if (a + b < 4) {
result = 'Мало';
} else {
result = 'Много';
}
решение
Перепишите 'if..else' в '?'
важность: 5
Перепишите if..else с использованием нескольких операторов '?'.
Для читаемости - оформляйте код в несколько строк.
var message;
if (login == 'Вася') {
message = 'Привет';
} else if (login == 'Директор') {
message = 'Здравствуйте';
} else if (login == '') {
message = 'Нет логина';
} else {
message = '';
}
Задание к работе
1. Запишите условный оператор if для определения знака переменной var.
2. В каких случаях следует использовать оператор switch?
3. Используя условный оператор, выполните проверку на принадлежность значения переменной диапазону [10; 20).
4. Приведите программу замены малых латинских букв большими с использованием оператора switch.
5. Как записывается логическое равенство в операторе if?
6. Приведите обозначение логического знака «не равно».
7. Какими символами обозначаются логические операции И и ИЛИ в условном операторе if?
8. Вычислить значение переменной у по одной из двух ветвей:
9. В компьютер вводятся два числа. Если первое больше второго, то вычислить их сумму, иначе - произведение. После этого компьютер должен напечатать результат и текст ЗАДАЧА РЕШЕНА
10. Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет - только по две. Сколько голов и глаз у дракона, которому Nлет?
11. Дано целое число A. Проверить истинность высказывания: «Число A является положительным».
12. Человек вводит в компьютер число. Если оно находится в интервале от 28 до 30, то нужно напечатать текст ПОПАЛ, если оно больше или равно 30 - то ПЕРЕЛЕТ, если оно находится на отрезке от 0 до 28, то НЕДОЛЕТ, если число меньше нуля - НЕ БЕЙ ПО СВОИМ
Практическое занятие №7
Тема: Циклические операторы while(do-while), for и работа над ними
Цель работы: существует три оператора цикла, которые очень важно хорошо знать для написания программ.
Указание к работе: написать примеры к трем операторам циклам и узнать разницу между ними.
Оператор while. Конструкция оператора while
while (Условие выполнения) {
Тело цикла;
}
Где выражение в скобках определяет условие: пока (while) оно выполняется, будет выполняться выражение в фигурных скобках.
class WhileLoop {
public static void main (String[] args ) {
int a = 0;
while(a < 10) {
System.out.print(a);
a++;
}
}
}
Данный цикл выведет:
0123456789
Конструкция оператора do while:
do {
Тело цикла;
} while (условие выполения);
Отличие данного оператора от while только в том, что он является оператором постусловия (сначала выполнит, потом проверит). То есть, даже если условие не выполняется никогда, всё равно действие будет выполнено один раз.
public class DoWhileLoop {
public static void main (String[] args) {
int i = 0;
do {
System.out.print(i);
i++;
} while (i < 10);
System.out.println(); //Это можно использовать для простого перевода строки
do {
System.out.print("Do...while is cool;");
} while (2 == 3); //Можно было написать и просто false
}}
Данный цикл выведет:
0123456789
Do...while is cool;
Как видно из кода, несмотря на то что 2 != 3 строчка всё равно была выведена на экран.
Оператор for[править]. Конструкция оператора for
for (Начальное значение переменной; Логическое выражение с переменной(условие выполнения цикла); Действие над переменной, вызываемое при выполнении условия) {
Операторы, которые будут выполнять цикл при условии, что логическое выражение - true;}
Цикл for использует переменную и проверяя её значение выполняет операторы, после чего совершает над ней действие. Например:
class ForLoop {
public static void main (String[] args ) {
for (int i = 0; i < 10; i++) {
System.out.print ("Ku-Ku "); } }}
Цикл работает с переменной i. После инициализации или после выполнения действия, проверяется условие продолжения, если оно равно true, действие выполняется снова, после чего переменная увеличивается операцией инкремента.
Данный цикл выведет:
Ku-Ku Ku-Ku Ku-Ku Ku-Ku Ku-Ku Ku-Ku Ku-Ku Ku-Ku Ku-Ku Ku-Ku
Задания к работе
1. В чем отличия между операторами while и do while?
2. Дайте понятие вложенного цикла.
3. Запишите прототип функции, которая принимает два целочисленных аргумента и возвращает вещественное число.
4. Запишите функцию возведения числа в квадрат.
5. Дайте понятие рекурсии.
6. В каких задачах целесообразно использовать рекурсивные функции?
7. Приведите функцию с тремя аргументами, один из которых задан со значением по умолчанию.
8. Дайте понятие статических переменных и какие особенности их использования существуют?
9. В компьютер вводятся два числа. Если первое больше второго, то вычислить их сумму, иначе - произведение. После этого компьютер должен напечатать результат и текст ЗАДАЧА РЕШЕНА
10. Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет - только по две. Сколько голов и глаз у дракона, которому Nлет?
11. Дано целое число A. Проверить истинность высказывания: «Число A является положительным».
12. Человек вводит в компьютер число. Если оно находится в интервале от 28 до 30, то нужно напечатать текст ПОПАЛ, если оно больше или равно 30 - то ПЕРЕЛЕТ, если оно находится на отрезке от 0 до 28, то НЕДОЛЕТ, если число меньше нуля - НЕ БЕЙ ПО СВОИМ
Практическое занятие №8
Тема: Конструкция switch_case
Цель работы: сравнить выражение сразу с несколькими вариантами.
Указание к работе: напишите "if", аналогичный "switch", перепишите код с использованием одной конструкции switch,
Оператор switch
В отличие от операторов if-then и if-then-else, оператор switch применим к известному числу возможных ситуаций. Можно использовать простые типы byte, short, char, int.
Также можно использовать Enum и String (начиная с JDK7), и специальные классы, которые являются обёрткой для примитивных типов: Character, Byte, Short, Integer.
Дублирование значений case не допускается. Тип каждого значения должен быть совместим с типом выражения.
Команду switch часто называют командой выбора. Выбор осуществляется в зависимости от целочисленного выражения. Форма команды выглядит так:
switch(ВыражениеДляСравнения) {
case Совпадение1:
команда;
break;
case Совпадение2:
команда;
break;
case Совпадение3:
команда;
break;
default:
оператор;
break;
}
Параметр ВыражениеДляСравнения - выражение, в результате вычисления которого получается целое число (как правило).
Команда switch сравнивает результат ВыражениеДляСравнения с каждым последующим Совпадением. Если обнаруживается совпадение, то исполняется команда или набор команд, которые прописаны за данным оператором.
Если совпадений не будет, то исполняется команда после ключевого слова default. Однако оператор default не является обязательным.
В этом случае при отсутствии совпадений программа не выполняет никаких действий.
Каждая секция case обычно заканчивается командой break, которая передаёт управление к концу команды switch.
Рассмотрим простейший пример с месяцами. Запустим наш учебный проект и добавим код в обработчик нажатия кнопки
int month = 3;
String monthString;
switch (month) {
case 1: monthString = "Январь";
break;
case 2: monthString = "Февраль";
break;
case 3: monthString = "Март";
break;
case 4: monthString = "Апрель";
break;
case 5: monthString = "Май";
break;
case 6: monthString = "Июнь";
break;
case 7: monthString = "Июль";
break;
case 8: monthString = "Август";
break;
case 9: monthString = "Сентябрь";
break;
case 10: monthString = "Октябрь";
break;
case 11: monthString = "Ноябрь";
break;
case 12: monthString = "Декабрь";
break;
default: monthString = "Не знаем такого";
break;
}
mInfoTextView.setText(monthString);
Запустите проект и нажмите кнопку - в текстовом поле появится слово Март (любимый месяц котов).
При желании, можно переписать пример с использованием if-then-else:
int month = 3;
if (month == 1) {
mInfoTextView.setText("Январь");
} else if (month == 2) {
mInfoTextView.setText("Февраль");
}
... // и так далее
В каждом блоке case имеется оператор break, который прерывает свой блок кода. Его нужно использовать обязательно, иначе выполнение кода продолжится. Хотя иногда это и используется.
java.util.ArrayList<String> futureMonths = new java.util.ArrayList<String>();
int month = 8;
switch (month) {
case 1:
futureMonths.add("January");
case 2:
futureMonths.add("February");
case 3:
futureMonths.add("March");
case 4:
futureMonths.add("April");
case 5:
futureMonths.add("May");
case 6:
futureMonths.add("June");
case 7:
futureMonths.add("July");
case 8:
futureMonths.add("August");
case 9:
futureMonths.add("September");
case 10:
futureMonths.add("October");
case 11:
futureMonths.add("November");
case 12:
futureMonths.add("December");
break;
default:
break;
}
if (futureMonths.isEmpty()) {
mInfoTextView.setText("Invalid month number");
} else {
for (String monthName : futureMonths) {
mInfoTextView.setText(monthName);
}
}
Если код в блоках case совпадает, то блоки можно объединить. Например, код для подсчёта дней в месяце:
int month = 2;
int year = 2012;
int numDays = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
numDays = 29;
else
numDays = 28;
break;
default:
mInfoTextView.setText("Несуществующий месяц");
break;
}
mInfoTextView.setText("Число дней = " + numDays);
При изучении оператора if мы рассматривали пример с временами года. Перепишем его с использованием оператора switch:
int month = 3;
String season;
switch (month) {
case 12:
case 1:
case 2:
season = "Зимушка-зима";
break;
case 3:
case 4:
case 5:
season = "Весна";
break;
case 6:
case 7:
case 8:
season = "Лето";
break;
case 9:
case 10:
case 11:
season = "Осень";
break;
default:
season = "Вы с какой планеты?";
}
mInfoTextView.setText("Мартовские песни коты поют, когда на дворе "
+ season);
Следующий пример случайным образом генерирует английские буквы. Программа определяет, гласные они или согласные:
Random random = new Random();
for (int i = 0; i < 100; i++) {
int c = random.nextInt(26) + 'a';
mInfoTextView.setText((char)c + ", " + c + ": ");