Исходный оператор объединенный оператор

a = a + 5; a+=5;

a = a – 3; a-=3;

a = a * 4; a*=4;

a = a / 6; a/=6;

a = a % 2; a%=2;

a = a + b / c; a+=b/c;

a = a & 3; a&=3;

a = a | 2; a|=2;

a = a * b / c; a*=b/c;

a = a * (b + c); a*=b + c;

Эти операции, как и сама операция присваивания, имеют самый низкий приоритет и выполняются в выражениях последнимисправа налево, поэтому, например, замена

a = a / b *c; на a/=b * c;

будет неверна – получаются различные выражения.

В операторах присваивания могут использоваться операции инкремента++и декремента--. Знаки инкремента и декремента могут стоять в выражениях как перед переменной (префиксная запись), так и после нее (постфиксная запись). При этом выражения будут вычисляться по-разному:

- при префиксной записи (знак перед переменной) сначала изменяется значение этой переменной, а затем выполняются другие операции, и последней – операция присваивания:

a = 4;

b = ++a; // a=5, b=5

c = ++b/2; // b=6, c=3

d = ++a/2; // a=6, d=3

- при постфиксной записи (знак после переменной) сначала вычисляется значение выражения со старыми значениями переменных, выполняется операция присваивания, после чего выполняются операции инкремента или декремента:

a = 4;

b = a++; // b=4, a=5

c = b++/2; // c=2, b=5

d = a++/2; // d=2, a=6

В Java приветствуется присваивание начальных значений переменным при их описании – инициализация переменных:

int i=5;

float x=3.1415;

char c=’A’;

Инициализировать переменные можно и выражениями, операндами которых являются константы:

int k=117*16;

float x= 3.1415*2.0e-3;

Внимание! Если значения переменных не заданы при их описании, то они автоматически не инициализируются!

В этом случае при компиляции программы будет выведено сообщение об ошибке:

Variable имяПеременной might not have been initialized

(Переменная имяПеременной, возможно, не была инициализирована)

Примеры записи операторов присваивания:

1.

int a=1;

int b=2;

int c=3;

double x=2.0;

a+= ++a / b++ % (int)(c-= Math.ceil(Math.sqrt(x))); // a=1 b=3 c=1

b+= (a | c++) - ++a % (int) Math.floor(Math.sqrt(x));//a=2 b=4 c=2

c|= --b % a--; // a=1 b=3 c=2

2.

int a=3;

int b=2;

int c=1; // a=2 b=3 c=4

b|= ++a / (c+= b++); // a=3 b=3 c=7

a%= --a - ++b; // a=1 b=4 c=7

3.

int a=0;

int b=0;

int c=0;

c+= b++; // a=0 b=1 c=0

b+= ++c % ('A' / '1' + 'A' % '1' % 5); // a=0 b=2 c=1

a-= ++b - c++; // a=-2 b=3 c=2

Ввод и вывод данных

Программы на алгоритмических языках обычно составляются таким образом, чтобы они могли быть использованы при различных наборах входных данных. При этом входные данные не задаются в программе при инициализации переменных, именованными константами или операторами присваивания, а помещаются отдельно от программы, например, в виде файла на внешнем носителе или входного потока с клавиатуры. В самой же программе предусматривается возможность ввода требуемых значений с устройств ввода (клавиатуры, магнитного диска) в оперативную память компьютера и вывода результатов вычислений из памяти на внешние носители информации (экран терминала, магнитный диск, принтер).

Под вводом данных понимаются операции передачи данных с внешних устройств ввода в оперативную память компьютера, а под выводом – из оперативной памяти на внешние устройства хранения информации.

Для того чтобы отвлечься от особенностей конкретных устройств ввода/вывода, в Java употребляется понятие потока (stream). Считается, что в программу идет входной поток (inputstream) символов Unicode или просто байтов, воспринимаемый в программе методами read(). Из программы методами write(), print(), println(), printf() выводится выходной поток (output stream) символов или байтов. При этом неважно, куда направлен поток: на консоль, на принтер, в файл, базу данных или сеть – методы write(), print() ничего об этом не знают.

Эти потоки определены в классе System статическими полями in, out и err. Их можно использовать без всяких дополнительных определений. Они называются соответственно стандартным вводом, стандартным выводом и стандартным выводом сообщений. Эти стандартные потоки могут быть соединены с разными конкретными устройствами ввода/вывода.

Поток err предназначен для вывода системных сообщений программы: при трассировке, сообщений об ошибках или в процессе выполнения программы. Как правило, такие сообщения заносятся в специальные журналы, называемые log-файлами, а не выводятся на консоль.

Поток in – это экземпляр класса InputStream. Стандартно он назначен на ввод с клавиатуры, который выполняется методами read().

Поток out – это экземпляр класса PrintStream, организующего выходной поток байтов. Он выводит информацию на консоль (монитор) методами print(), println(), printf().

Понятие потока оказалось настолько удобным и облегчающим программирование ввода/вывода, что в Java предусмотрена возможность создания потоков, направляющих символы или байты не на внешние устройства, а в массив или из массива, то есть связывающие программу с областью оперативной памяти.

Все методы организации потоков собраны в классы пакета java.io.

Помимо консольного ввода/вывода, в Java широко используется ввод/вывод с помощью диалоговых окон.

Наши рекомендации