В Java также используется укороченная форма записи для того, чтобы одновременно произвести операцию и присвоение. Она обозначается оператором с последующим знаком равенства и работает одинаково для всех операторов языка (когда в этом есть смысл). Например, чтобы прибавить 4 к переменной х и присвоить результат х, используйте команду х += 4.
Следующий пример демонстрирует использование арифметических операций:
//: operators/MathOps.java // Демонстрация математических операций, import java.util.*;
import static net.mindview.util.Print.*;
public class MathOps {
public static void main(String[] args) {
// Создание и раскрутка генератора случайных чисел
57
Random rand = new Random(47); int i, j, k;
// Выбор значения от 1 до 100: j = rand.nextlnt(lOO) + 1: printC'j : " + j): к = rand.nextlnt(lOO) + 1. printC'k : " + k): i = J + k;
printC'j + к : " + i); 1 - J - k:
printC'j - к :" + i); i = к / j,
printC'k / j : " + i): i = к * j;
printC'k * j • " + i): i = к % j;
printC'k % j . " + i). j X= k:
printC'j %/ к • " + j); // Тесты для вещественных чисел float u.v.w; // также можно использовать double v = rand.nextFloatO; printC'v . " + v); w = rand.nextFloatO; print("w : " + w), u = v + w;
printC'v + w : " + u); u = v - w;
printC'v - w : " + u). u = v * w;
printC'v * w : " + u); u = v / w;
printC'v / w : " + u): // следующее также относится к типам // char, byte, short, int, long и double: u += v:
printC'u += v . " + u): u -= v;
printC'u -= v : " + u); u *= v:
printC'u *= v : " + u): u /= v;
printC'u /= v : " + u).
}
} /* Output: j • 59 k 56 j + k • 115 j - k • 3 k / j : 0 k * j : 3304 k % j : 56 j %= k : 3 v • 0.5309454 w : 0.0534122 v + w • 0 5843576 v - w : 0.47753322 v * w : 0.028358962
v / w 9 940527 u += v : 10.471473 u -= v 9 940527 u *= v 5 2778773 u /= v : 9 940527 */// ~
Для получения случайных чисел создается объект Random. Если он создается без параметров, Java использует текущее время для раскрутки генератора, чтобы при каждом запуске программы выдавались разные числа.
Программа генерирует различные типы случайных чисел, вызывая соответствующие методы объекта Random: nextlnt() и nextFloat() (также можно использовать nextLong() и nextDouble()). Аргумент nextlnt() задает верхнюю границу генерируемых чисел. Нижняя граница равна 0, но для предотвращения возможного деления на 0 результат смещается на 1.
Унарные операторы плюс и минус
Унарные минус (-) и плюс (+) внешне не отличаются от аналогичнхы бинарных операторов. Компилятор выбирает нужный оператор в соответствии с контекстом использования. Например, команда
х = -а;
имеет очевидный смысл. Компилятор без труда разберется, что значит
х = а * -Ь;
но читающий код может запутаться, так что яснее будет написать так:
х = а * (-Ь):
Унарный минус меняет знак числа на противоположный. Унарный плюс существует «для симметрии», хотя и не производит никаких действий.
Автоувеличение и автоуменьшение
В Java, как и в С, существует множество различных сокращений. Сокращения могут упростить написание кода, а также упростить или усложнить его чтение.
Два наиболее полезных сокращения — это операторы увеличения (инкремента) и уменьшения (декремента) (также часто называемые операторами автоматического приращения и уменьшения). Оператор декремента записывается в виде — и означает «уменьшить на единицу». Оператор инкремента обозначается символами ++ и позволяет «увеличить на единицу». Например, если переменная а является целым числом, то выражение ++а будет эквивалентно (а = а + 1). Операторы инкремента и декремента не только изменяют переменную, но и устанавливают ей в качестве результата новое значение.
Каждый из этих операторов существует в двух версиях —
// operators/AutoInc java
import static net mindview util Print *.
public class Autolnc {
public static void main(String[] args) { int i = 1; printC'i : print("++i print("i++ printC'i • print C'--i printC'i--printC'i
i); + ++i) + i++) i). + --i) + i-) i),
// Префиксный инкремент
// Постфиксный инкремент
// Префиксный декремент
// Постфиксный декремент
} /* Output-i . 1 ++i • 2 i++ . 2 i . 3 -i . 2 1-- 2
i • 1 *///.-
Вы видите, что при использовании префиксной формы результат получается после выполнения операции, тогда как с постфиксной формой он доступен до выполнения операции. Это единственные операторы (кроме операторов присваивания), которые имеют побочный эффект. (Иначе говоря, они изменяют свой операнд вместо простого использования его значения.)