2. Обсуждаемые вопросы
1. Конструкция if-else
2. Оператор-переключатель switch
3. Оператор break
4. Оператор цикла while
5. Оператор цикла do while
6. Оператор цикла for
7. Оператор continue
8. Пример использования операторов break и
continue с выходом на метку
3. Конструкция if-else
if(выражение) ЗАМЕЧАНИЕ: Здесь и далее в
оператор_или_блок_1 синтаксисе квадратные
[ else
скобки заключают
оператор_или_блок_2 ]
необязательную часть, т.е.
Таким образом, else-часть может ту, которая может
быть, а может и отсутствовать. отсутствовать.
Сначала вычисляется логическое "выражение", и если оно истинно (т.е.
результат вычисления логического выражения будет равен true), выполняется
"оператор_или_блок_1".
Если выражение ложно, (т.е. его значение равно false), и существует
else-часть, то выполняется "оператор_или_блок_2".
Пример :
if( a > b ) {
z = a;
} else {
z = d; i++;
}
4. Конструкция if-else
(продолжение)
"выражение" – в конечном итоге является логическим
выражением, то есть оно в обязательном порядке должно
вырабатывать булевское значение. Однако в его состав могут входить
и арифметические выражения.
Например: if( i == (j=6) )
System.out.println("Greeting");
Операторы if-else могут быть множественными. Например, чтобы выделить
попадание значения некоторой переменной i в один из приведенных слева
диапазонов
If (i <= 0) {
можно написать набор операторов: . . .
} else if (i <= 10) {
. . .
} else if (i <= 20) {
Обратите внимание на стиль . . .
} else {
написания и расстановку
. . .
фигурных скобок. Это типичное }
решение (но необязательное).
5. Оператор-переключатель switch
Конструкция switch заменяет разветвленный многократный оператор if-
else. switch(выражение) {
case конст_выр_1 :
оператор(ы)
case конст_выр_2 :
оператор(ы)
.
.
case конст_выр_n :
оператор(ы)
default : оператор(ы)
}
После вычисления "выражение" в заголовке
оператора, результат, который может иметь тип
byte, short, int или char, преобразовывается к типу
int, который является для него основным.
ЗАМЕЧАНИЕ: Оператор switch может работать и с типом данных
enum, использование которого будет рассмотрено позднее.
6. Оператор-переключатель switch
(продолжение)"выражение", полученное значение
После вычисления
последовательно сравнивается с константными
выражениями, начиная с самого верхнего
("конст_выр_1"), которые, естественно, тоже должны быть
преобразованы к типу int, пока не будет установлена их
эквивалентность. Тогда выполняются оператор(ы) внутри
соответствующего case.
Однако в общем случае, если не вычисления не прервать
явно, они будут вычисляться и для последующих клауз case
без всяких проверок, пока не выполняться все операторы в
switch.
Для того, чтобы прервать вычисления, после найденного
первого соответствия, в конце каждого набора операторов
должен присутствовать оператор break.
7. Оператор-переключатель
switch (продолжение)
Ветвь, называемая default (выполняющаяся по умолчанию), может
отсутствовать. Если она есть, то последовательность операторов, стоящая
непосредственно за словом default и двоеточием, выполняется, когда не
найдено согласование ни с одним из константных выражений.
Хотя клауза default char sign;
может стоять в int x, y=4, z=2;
любом switch( sign ) {
месте, обычно ее case '-': x = y - z;
помещают break;
последней. case '+': x = y + z;
break;
case '*': x = y * z;
В операторе switch break;
не может быть двух case '/': x = y / z;
клауз case с break;
одинаковыми default :
значениями. System.out.println("Неизвестная
операцияn");
8. Пример примере нумерация днейswitch
В следующем применения
Начинается с понедельника и это день недели номер
1:
int dayNum;
. . .
switch (dayNum) {
case 6:
System.out.println("Суббота это неплохо");
case 7:
System.out.println("Выходные нравятся всем");
break;
case 1:
System.out.println("Понедельник - тяжелый день");
default:
System.out.println("Трудовые будни");
break;
}
в субботу будет выведено: а в понедельник будет выведено :
Суббота это неплохо Понедельник - тяжелый день
Выходные нравятся всем Трудовые будни
В операторе switch помимо оператора break, также может
быть использован оператор continue, хотя это делается очень
редко.
9. Оператор break
Оператор break обеспечивает прекращение выполнения
самого внутреннего из объемлющих его операторов
switch, do, for или switch.
По умолчанию после выполнения оператора break
управление передается оператору, следующему за
прерванным оператором.
Однако оператор break может содержать метку, на
которую следует выполнить выход. Такая конструкция
используется только для выхода из нескольких вложенных
циклов.
10. Оператор цикла while
while( условное_выражение )
оператор_или_блокрасчета факториала
Пример
для числа, заданного int i = 0, fact =
переменной n: 1;
Цикл может быть также прекращен при while( i < n ) {
использовании внутри тела цикла оператора fact *= i;
if и в комплексе с операторами break или ++i;
return. }
В цикле типа while проверка условия производится перед выполнением тела
цикла. Если результат вычисления условного выражения равен true, то
выполняется "опреатор_или_блок". Возможный сценарий выполнения цикла
while заключается в том, что перед оператором цикла инициализируется одна
или несколько переменных, определяющих "условное_выражение" (возможно
счетчик числа повторений цикла). Затем "оператор_или_блок" должен
изменять значения одной или нескольких переменных, входящих в
"условное_выражение", с тем чтобы в конце концов результат вычисления
выражения стал false и цикл завершился.
11. Оператор цикла do while
do
оператор_или_блок
while( условное_выражение
);
Пример: int i = 10, k = 20;
do {
i += 10;
System.out.println( "i=" + i
);
} while( i < k );
Отличие цикла do while от цикла while состоит в
том, что проверка условия производится после выполнения
тела цикла.
Это означает, что "оператор_или_блок" выполняется
минимум один раз; тогда как тело цикла while может не
выполнятся ни разу.
ЗАМЕЧАНИЕ: Обратите внимание на то, что здесь в конце оператора while
требуется ограничитель - точка с запятой.
12. Оператор цикла for
Наиболее общей и наиболее распространенной
формой цикла является цикл FOR.
for( [ выражение_1 ];[ выражение_2 ];[ выражение_3 ] )
оператор_или_блок
Каждое из трех выражений можно опускать; при этом
разделитель
(точка с запятой) должен обязательно присутствовать.
Формальное описание
шагов выполнения цикла for:
Обычно "выражение_1"
служит для 1. Вычисляется "выражение_1" ( если оно
инициализации присутствует ).
переменных цикла 2. Вычисляется "выражение_2" ( если оно
(индекса); "выражение_2" присутствует ). Если вычисленное значение
равно нулю, то цикл прекращается, в
- для выполнения
противном случае цикл будет продолжен.
проверки на окончание
3. Исполняется тело цикла.
цикла; а "выражение_3" -
4. Вычисляется "выражение_3" ( если оно
для изменения значения
присутствует).
переменных цикла
5. Переход к пункту 2.
(индекса).
13. Пример цикла for
int n=10, sum=0;
for( int i=0; i < n; i++ ) sum +=
i*i;
В данном случае не важно, какой префиксный или постфиксный
операторы используются – результат будет одинаковым.
Цикл for удобно использовать, когда мы работаем со счетчиками или
индексами, то есть когда известно начальное и конечное значения
индекса, а также шаг, который может быть отличен от 1.
for( int i=0; i < 100; i+=10 ) {
. . .
}
В описании цикла можно декларировать несколько
переменных, операции с которыми перечисляются с применением
запятой в качестве разделителя.
Например, можно for( int i=0, j=n; i < j; i++, j-- )
использовать два {
счетчика: . . .
}
ЗАМЕЧАНИЕ: В настоящее время имеется специфическая
форма цикла for, которая будет рассмотрена позднее.
14. Оператор continue
int i, n=10;
double sum=0.0;
for(int i=0; i < n; i++){
if( i==6 || i==8 )
continue;
sum += i * 10.0;
}
Оператор continue работает подобно оператору break, но в отличие от
оператора break прерывает текущее выполнение тела цикла и передает
управление на следующую итерацию. Оператор continue так же, как и
оператор break, прерывает самый внутренний из объемлющих его циклов.
Однако, в случае вложенных циклов иногда требуется осуществлять выход из
внутреннего цикла за пределы наружного. Это можно было бы сделать с
помощью выставления значения некоторого булевского флага и его проверки во
внешнем цикле. Однако операторы break позволяют осуществлять переход и на
метку.
ЗАМЕЧАНИЕ: В языке Java метку можно устанавливать только на
оператор цикла.
15. Пример использования
оператора break
с выходом на метку outer
class Question {
public static void main(String[] args) {
int i = 1;
int j = 2;
outer: while (i < j) {
++i;
inner: do {
++j;
if( j % 3 == 0 ) continue outer;
if( i % 3 == 0 ) break inner;
if( i % 3 == 1 ) break outer;
System.out.println( i * j );
} while (j < i);
System.out.println( i + j );
}
}
}
16. Итоги
В теме рассмотрены:
• Конструкция if-else
• Оператор-переключатель switch
• Оператор break
• Оператор цикла while
• Оператор цикла do while
• Оператор цикла for
• Оператор continue
• Пример использования операторов break и
continue с выходом на метку
17. Задания
Выберите несколько заданий (3-4 штуки) в
зависимости от вашего уровня и выполните их
Не обязательно делать все!
18. Задания 1-го уровня сложности
1. Вычислить площадь и периметр
прямоугольника, если задана длина одной стороны
(a) и коэффициент n (%), позволяющий вычислить
длину второй стороны (b=n*a).
2. Вычислить периметр и площадь прямоугольного
треугольника по заданным длинам двух катетов a и b.
3. В зависимости от дня недели, выдать сообщение о его
номере. В зависимости от номера месяца, выдать его
название.
4. Дана сторона равностороннего треугольника. Найти
площадь этого треугольника, его высоту, радиусы
вписанной и описанной окружностей.
19. Задания 2-го уровня сложности
1. Даны три действительных числа. Возвести в квадрат
те из них, значения которых неотрицательны, и в
четвёртую степень – отрицательные.
2. Даны две точки А(х1, у1) и В(х2, у2). Составить
алгоритм, определяющий, которая из точек
находится ближе к началу координат
3. На плоскости ХОУ задана своими координатами
точка А. Указать, где она расположена (на какой оси
или в каком координатном угле).
4. Определить принадлежит ли
некоторая точка М с
произвольными координатами
х,y закрашенной области.
20. Задания 3-го уровня сложности
1. Лежит ли точка M(xm, ym) внутри
треугольника, заданного координатами своих вершин
A(xA, yA), B(xB, yB), C(xC, yC)?
2. Даны три положительных числа. Определить, можно
ли построить треугольник с длинами сторон, равным
этим числам. Если можно, то ответить на
вопрос, является ли он остроугольным.
3. Можно ли на прямоугольном участке застройки
размером a на b метров разместить два дома
размером p на q и r на s метров? Дома можно
располагать только параллельно сторонам участка.
21. Задания на циклы
Протабулировать функцию:
на интервале [2,3], шаг 0,1
на интервале[0;1] шаг 0,1