Блок 1. Раздел 5. Тема 1
Делаем массивы – храним целые наборы данных, а не просто отдельные переменные.
Часто возникает такая ситуация, когда вам нужно хранить в программе много одинаковых данных. Например, вы делаете магазин, и хотите, чтобы в нем были сотни товаров, и для каждого нужно как минимум хранить его цену. Если хранить цены в отдельных переменных, то придется завести 200 переменных и помнить 200 их имен. Это было бы очень обременительно – тем более, что большие гипермаркеты хранят тысячи товаров. На этот случай и придуман массив – с ним такие данные хранить легко и удобно.
Мы напишем такой магазин в процессе разбора этой темы, а пока что давайте освоим необходимую для этого основу.
Определение. Массив – это набор переменных одинакового типа. У каждой переменной в массиве есть свой номер, и можно по номеру обращаться к той или иной переменной. Нумерация в Java идет с нуля – сначала нулевой элемент, затем первый, второй и так далее. Номер элемента называется индексом этого элемента. Длиной или размером массива называют количество элементов в нём.
Рассмотрим, например, такой массив:
Его длина равна 6, так как он содержит 6 элементов. В верхней строчке приведены индексы (номера) каждого из элементов – 0, 1, 2, 3, 3, 4, 5. Заметьте, что, хотя последний элемент пятый, всего элементов шесть – это происходит потому, что мы считаем их с нуля.

Так будет всегда – поскольку мы посчитали элементы с нулевого, а не первого, то если длина массива равна N, значит последний элемент идет под номером N-1. Элемента под номером N в массиве нет, и если мы попробуем к нему обратиться, то это будет выход за границу массива. За границей массиве лежат какие-то другие данные нашей или чужой программ – если к ним обратиться, то может нарушиться работа любой программы. Только представьте – там лежала чья-то переменная, она за что-то отвечала, и тут её значения поменяли, совершенно не зная, что это за переменная, и за что она отвечает. Может поменяться ход любой программы.

Поэтому, когда вы выходите за границу массива во избежание падения системы Java выдает ошибку index out of range – индекс вне границ (массива). Не удивляйтесь этой ошибке, и если она произойдет, просто ищите, где вы обратились к элементу со слишком большим, больше N-1, или наоборот отрицательным индексом. Напомню, начинаем с нулевого и далее идет первый, второй, третий и так далее до N-1 элементы. Элемента с индексом N в массиве нет.
Объявление массива, обращение к произвольному элементу
Посмотрим как объявить в коде такой массив:
//Объявление массива делается так:
int [] ar = new int [5]; 
// Тип имени ar есть int [], что значит массив целых
// ar присваиванием получает свое первое значение:
// new int [5] – значит «создать новый массив целых на 5 элементов
// Общий синтаксис такой: new <тип переменных> [длина массива] 
// если вместо int написать double, то будет массив дробных чисел.

	//Теперь заполним массив элементами
ar [0] = 90;   //обращение к элементу с индексом ноль
ar [1] = 30;   //когда в квадратных скобках указан номер
ar [2] = 100; //мы можем работать с элементом по этому номеру
ar [3] = 120; //как будто он есть переменная с именем ar [номер]
ar [4] = 35;   //его можно присваивать, его можно использовать.
ar [5] = 50;

	//К примеру распечатаем нулевой элемент:
System.out.println (“Нулевой элемент сейчас равен:”);
System.out.println (ar[0]);

	//Увеличим его на 10 на манер переменной:
ar [0] = ar [0] + 10; //  вспомните – мы также делали с переменными
	//Распечатаем уже новое значение
System.out.println (“Теперь элемент с индексом ноль равен:”);
System.out.println (ar [0]);

/*	Есть и второй вариант объявления массива – указанием всех его элементов в фигурных скобках: */
 int [] ar2 = {90, 30, 100, 120, 35, 50};
//Этот способ удобен, когда элементы известны как заданные числа
/*Имя ar – как переменная, но её значение есть массив, 
её тип есть int []. Можно присвоить ar новому массиву: */
ar = ar2;  // старый массив ar забыт, теперь ar и ar2 – суть одно. 
Самое главное мы уже освоили. Теперь время решать задачи. Ответьте на несколько вопросов, чтобы лучше усвоился новый материал:
Вопрос 1. Что значит объявить переменную? (ответы по кнопке "плюс")
Это значит назвать число заданного типа (целые, дробные или коды букв) каким-то своим именем. Под это число будет выделено место в оперативной памяти. Это число в дальнейшем можно менять и использовать в любых расчетах.
Вопрос 2. Что будет, если объявить две переменных с одним и тем же именем внутри одного блока фигурных скобок { } ?
Компилятор выдаст ошибку, потому что с его точки зрения, вы говорите, что одно и то же имя теперь может отвечать двум разным переменным. Он не может разобраться, какой же из двух переменных это имя отвечает, и сообщит, что это имя двусмысленное и его нужно изменить.

То есть в таком коде есть ошибка:
int x = 100;
int x = 200; // ошибка, x уже был объявлен
А в таком коде все нормально:
int x = 100;
x = 200; //поменять значение x на 200
//именно отсутствие int в начале строчки говорит о том, что x просто меняет свое значение, и мы не пытаемся завести новую переменную.
Задача 1. Ниже дан код с двумя переменными. Что будет распечатано на экране?
package javaapplication1;
public class JavaApplication1 {
public static void main(String[] args) {
  int x = 100;
  x = x*10/2 + x;
  System.out.println (x);

  double y = x - 5.5;

  System.out.println (y);
 }   
}
Ответ
600
594.5
Решение
Посчитаем выражения для введенных в коде переменных x и y.
Сначала x = 100;
Затем в строчке
x = x*10/2 + x;
компилятор сначала рассчитывает числовое выражение справа от равно
на основе старого значения x
100*10/2 + 100, то есть 600.
Поэтому строчка читается как "икс присвоить 600". Это значение и будет распечатано на экране.

На его основе будет вычислено значение y = x - 5.5, то есть 594.5.
Переменная y обладает типом double, то есть дробное, поэтому в ней можно сохранить дробную часть 0.5 . Если бы y было целым, то в такой переменной невозможно было бы сохранить дробную часть, и компилятор подчеркнул бы эту строчку красным и выдал ошибку. В ошибке было бы сказано, что идет отбрасывание дробной части, и это может привести к потере точности.
Решайте больше задач по этому разделу здесь.
В следующей теме расскажем подробнее
о типах данных в Java