Управляющие структуры (продолжение).
Для работы с числовыми величинами в Java выделены следующие
арифметические операторы (их операнды - величины типа byte, short,
int, long, float, double, char):
запись семантика количество операндов пример
+ сложение 2 a+b
- изменение знака 1 -a
- вычитание 2 a-b
* умножение 2 a*b
/ деление 2 a/b
% деление по модулю 2 a%b
Замечания:
Результатом операции над двумя величинами одного типа является
величина этого же типа. Если же тип операндов различен, то будет
совершено автоматическое расширяющее приведение типов (об этом
поговорим в следующий раз).
Для целочисленных типов оператор / действует следующим образом:
для положительных a и b-это целая часть от деления a на b,
(-a)/b=-(a/b) a/(-b)=-(a/b) (-a)/(-b)=a/b. Деление по модулю
определяется следующим образом a%b=a-(a/b)*b.Так, например,
5/2=2, (-5)/2=-2, 5/(-2)=-2, (-5)/(-2)=2, (-5)%(-2)=-1.
Для вещественных типов оператор / действует обычным образом,
оператор % же для вещественных типов определяется хитрее:
a%b=a-[a/b]*b, где [x]-целая часть числа x, т.е. наибольшее целое
не превосходящее данное.
Велчины типа char в арифметических операциях автоматически приводятся
к типу int.
Из C в Java заимствованы "укороченные" операторы присваивания/действия
вида x{op}=y, где {op}-любой из приведенных выше арифметических
операторов. Семантика этих операторов: x=x{op}y, значение- x{op}y.
К примеру, результатом последовательности операторов
x=1;
y=(x+=x);
будет значение 2 у y.
Следующие операторы над целочисленными величинами порождают логическое
значение (величину простого типа boolean - true или false):
запись семантика количество операндов пример
== проверка 2 1==2
на равенство
!= проверка 2 a!=1
на неравенство
> проверка 2 a>b
на превосходство
первого
< проверка 2 a<b
на превосходство
второго
>= проверка 2 x>=1
на непревосходство
второго
<= проверка 2 x<=1
на непревосходство
первого
Для определения порядка выполнения операторов, их можно группировать
в скобки, операторы вне скобок Java группирует в соответствии со
следующей таблицей приоритетов:
0. ( )
1. * / %
2. + -
3. > >= < <=
4. == !=
5. = {op}=
Сначала выполняются более высокоприоритетные операторы, внутри одного
приоритета операторы выполняются слева направо. Например, выражение
a+b*c/d-m эквивалентно следующему (a+((b*c)/d))-m, которое представляет
его вычислительную схему.
Для контроля потока управления используются операторы if и while.
Условный оператор if имеет следующий синтаксис: if (b) {блок}; или
упрощенный вариант: if (b) оператор;, где b-величина логического типа,
блок-последлвательность разделенных операторов(лексем). Возможен
синтаксис: if (b) {блок1} else {блок2};, в этом случае блок1
выполняется если b истинно, а блок2-если ложно.Любой из блоков
можно заменить оператором. else всегда относится к последнему
if в текущем блоке, т.о. в последовательности операторов
if (a)
if (b) {блок1};
else {блок2};
else относится к if (b). Если нужно чтобы else относился к другому
else нужно соответствующим образом расставить блоки:
if (a) {
if (b) {блок1};
}
else {блок2};
здесь else относится к if (a).
Для организации циклов в Java предназначен оператор while:
while (b) {блок};. Он проверяет на истинность выражение b, и, если b
истинно, выполняет блок.После выполнения блока если b истинно, то блок
выполняется еще раз, и так до тех пор пока b не станет ложно. Чтобы
изнутри блока покинуть while, используется оператор break; чтобы
перейти на начало новой итерации (проверка b на истинность и выполнение
блока в случае истинности) - оператор continue.
Узнав все это, давайте напишем простенькую программу:
IsCommon.java
public class IsCommon {
public static void main (String args[]) {
int num = 65537;
int i;
i=2;
while (i <= num/2) {
if (num % i == 0) break;
i++;
}
if (num % i == 0) System.out.println ("The number isn't common");
if (num % i != 0) System.out.println ("The number is common");
}
}
Как нетрудно догадаться, эта программа проверяет является ли число
65537 простым. Если вы вдруг этого не знаете, тем интереснее будет
наблюдать за результатом ее работы :)