ВОСЬМАЯ ПРОГРАММА

Массивы.
Массив – это группа переменных, для обращения к котором используется общее имя. В java допускается создание массивов любого типа и разной размерности. Массивы предоставляют удобный способ группирования связанной вместе информации.

Например, вам нужно проверить накормлены ли коты, которые живут в вашем доме. Конечно, же вы не знаете всех котов по именам, но вам известно где они живут (номера квартир). Для реализации такого задания целесообразно создать массив в котором вы укажите номера квартир и при вызове номера квартиры вы сможете проверить миску из которой кушает кот.

Массив — это конечная последовательность упорядоченных элементов одного типа, доступ к каждому элементу в которой осуществляется по его индексу.
Размер или длина массива — это общее количество элементов в массиве. Размер массива задаётся при создании массива и не может быть изменён в дальнейшем, т.е. нельзя убрать элементы из массива или добавить их туда, но можно в существующие элементы присвоить новые значения.
Индекс начального элемента — 0, следующего за ним — 1 и т.д. Индекс последнего элемента в массиве — на единицу меньше, чем размер массива.

В Java массивы являются объектами. Это значит, что имя, которое даётся каждому массиву, лишь указывает на адрес ячейки памяти. Кроме адреса в этой переменной ничего не хранится. А где хранится значение?
//Индекс массива, фактически, указывает на то, насколько надо отступить от начального элемента массива в памяти, чтоб добраться до нужного элемента.

Чтобы создать массив надо объявить для него подходящее имя, а затем с этим именем связать нужный фрагмент памяти, где и будут друг за другом храниться значения элементов массива.
И так открываем программную среду, создаем новый объект – массив.
1)   int [] x;  объявление массива, новый объект. Как известно новый объект занимает отдельную ячейку памяти поэтому в памяти, после написания этой строки будет выделена ячейка памяти в которой запишется адрес самого массива
int [] x = 1000
2)   x= new [5];  это построение самого массива!! Как строители строят многоэтажный дом, так программа выделяет определенное количество ячеек в памяти. В нашем случае, мы построили массив из 5 элементов. Записать шесть элементов в наш массив мы уже не можем.

Теперь начнем «заселять наши ячейки значениями».
x[0] = 4;
x[1] = 5;
x[2] = 6;
x[3] = 7;
x[4] = 8;

Но все это можно сократить!!! И записать в одной строке:
int [] x = {4,5,6,7,8}
Но есть и другие способы записи элементов массива…
Например, можно количество элементов объявить через переменную:
int [] a;
int n = 5;
a = new [n];
Теперь поговорим о заполнении массива.
Чтобы обратиться к какому-то из элементов массива для того, чтобы прочитать или изменить его значение, нужно указать имя массива и за ним индекс элемента в квадратных скобках. Элемент массива с конкретным индексом ведёт себя также, как переменная.
Когда мы выделили в памяти место для хранения элементов происходит заполнение массива элементами.
Смотрим:
Создадим массив из 5 элементов.
I способ
int [] a = {1,2,3,4,5};
II способ
int [] a;
a= new [5];
положим элементы в массив (напомню! У каждого элемента есть свое место).
I способ:
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
II способ:
int [] a;
a = new [5];
for(int i = 0; i<5, i++){
a[i] = (i+1);
System.out.print(a[i]+", ");
};
Понятно, что если бы массив у нас был не из 5, а из 100 элементов, до без цикла мы бы просто не справились.
Важно!
Если массив был создан с помощью оператора new, то каждый его элемент получает значение по умолчанию. Каким оно будет определяется на основании типа данных (0 для int, 0.0 для double и т. д.).
Вспомним про наших голодных котов!!!
Давайте создадим проект из двух классов, один класс Dispatcher, а второй – конечно же Cat!
В классе Cat мы опишем свойства наших котов, например, вес еды, которую они съедают и не забудьте создать конструктор.
Теперь приступаем к «созданию» котов. Создайте пять котов и попробуйте самостоятельно записать массив элементами которого будут коты.

Первый способ:
 Второй способ:
класс Cat:
Попробуем узнать ел ли вверенный нам кот сегодня. Как же это сделать?
Будем вводить число с клавиатуры и сверять миски из которых кушает данный кот.
Попробуйте объяснить, чему соответствует число, которое вводится с клавиатуры?
Свойство .length

Чтобы запомнить длину массива достаточно использовать свойство .length. Это свойство используется для чтения, его нельзя изменять. Используя это свойство можно писать программный код для обработки массива даже не зная его конкретного размера.
  

Давайте заполним массив из 10 элементов числами от 1 до 10 в свободном порядке.
Пробуем самостоятельно!!!
1.    Создаем проект из одного класса.
2.    Объявляем массив из 10 элементов.
3.    С помощью цикла заполняем массив значениями используя метод класса Math, random.
Используйте следующие методы:
Метод Math.floor() в Java дает целое число с нулевой дробной частью, ближайшее к числу аргумента слева

Реализация донного задания возможна двумя способами.

Задачи для самостоятельного решения.
1.    Создайте массив из всех чётных чисел от 2 до 20 и выведите элементы массива на экран сначала в строку, отделяя один элемент от другого пробелом, а затем в столбик (отделяя один элемент от другого началом новой строки). Перед созданием массива подумайте, какого он будет размера.
2 4 6 … 18 20
2
4
6

20
2.    Создайте массив из всех нечётных чисел от 1 до 99, выведите его на экран в строку, а затем этот же массив выведите на экран тоже в строку, но в обратном порядке (99 97 95 93 … 7 5 3 1).
3.    Создайте массив из 15 случайных целых чисел из отрезка [0;9]. Выведите массив на экран. Подсчитайте сколько в массиве чётных элементов и выведете это количество на экран на отдельной строке.
4.    Создайте массив из 8 случайных целых чисел из отрезка [1;10]. Выведите массив на экран в строку. Замените каждый элемент с нечётным индексом на ноль. Снова выведете массив на экран на отдельной строке.
5.    Создайте 2 массива из 5 случайных целых чисел из отрезка [0;5] каждый, выведите массивы на экран в двух отдельных строках. Посчитайте среднее арифметическое элементов каждого массива и сообщите, для какого из массивов это значение оказалось больше (либо сообщите, что их средние арифметические равны).
6.    Создайте массив из 4 случайных целых чисел из отрезка [10;99], выведите его на экран в строку. Определить и вывести на экран сообщение о том, является ли массив строго возрастающей последовательностью.
7.    Создайте массив из 20-ти первых чисел Фибоначчи и выведите его на экран. Напоминаем, что первый и второй члены последовательности равны единицам, а каждый следующий — сумме двух предыдущих.
8.    Создайте массив из 12 случайных целых чисел из отрезка [-15;15]. Определите какой элемент является в этом массиве максимальным и сообщите индекс его последнего вхождения в массив.
9.    Создайте два массива из 10 целых случайных чисел из отрезка [1;9] и третий массив из 10 действительных чисел. Каждый элемент с i-ым индексом третьего массива должен равняться отношению элемента из первого массива с i-ым индексом к элементу из второго массива с i-ым индексом. Вывести все три массива на экран (каждый на отдельной строке), затем вывести количество целых элементов в третьем массиве.
10.                      Создайте массив из 11 случайных целых чисел из отрезка [-1;1], выведите массив на экран в строку. Определите какой элемент встречается в массиве чаще всего и выведите об этом сообщение на экран. Если два каких-то элемента встречаются одинаковое количество раз, то не выводите ничего.
11.                      Пользователь должен указать с клавиатуры чётное положительное число, а программа должна создать массив указанного размера из случайных целых чисел из [-5;5] и вывести его на экран в строку. После этого программа должна определить и сообщить пользователю о том, сумма модулей какой половины массива больше: левой или правой, либо сообщить, что эти суммы модулей равны. Если пользователь введёт неподходящее число, то программа должна требовать повторного ввода до тех пор, пока не будет указано корректное значение.
12.                      Программа должна создать массив из 12 случайных целых чисел из отрезка [-10;10] таким образом, чтобы отрицательных и положительных элементов там было поровну и не было нулей. При этом порядок следования элементов должен быть случаен (т. е. не подходит вариант, когда в массиве постоянно выпадает сначала 6 положительных, а потом 6 отрицательных чисел или же когда элементы постоянно чередуются через один и пр.). Вывести полученный массив на экран.

13.                      Пользователь вводит с клавиатуры натуральное число большее 3, которое сохраняется в переменную n. Если пользователь ввёл не подходящее число, то программа должна просить пользователя повторить ввод. Создать массив из n случайных целых чисел из отрезка [0;n] и вывести его на экран. Создать второй массив только из чётных элементов первого массива, если они там есть, и вывести его на экран.
Многомерные массивы
Массив может состоять не только из элементов какого-то встроенного типа (int, double и пр.), но и, в том числе, из объектов какого-то существующего класса и даже из других массивов.
Массив который в качестве своих элементов содержит другие массивы называется многомерным массивом.
Чаще всего используются двумерные массивы. Такие массивы можно легко представить в виде матрицы. Каждая строка которой является обычным одномерным массивом, а объединение всех строк — двумерным массивом в каждом элементе которого хранится ссылка на какую-то строку матрицы.
Трёхмерный массив можно представить себе как набор матриц, каждую из которых мы записали на библиотечной карточке. Тогда чтобы добраться до конкретного числа сначала нужно указать номер карточки (первый индекс трёхмерного массива), потому указать номер строки (второй индекс массива) и только затем номер элемент в строке (третий индекс).
Соответственно, для того, чтобы обратиться к элементу n-мерного массива нужно указать n индексов.
Объявляются массивы так:
int[] d1; //Обычный, одномерный
int[][] d2; //Двумерный
double[][] d3; //Трёхмерный
int[][][][][] d5; //Пятимерный
При создании массива можно указать явно размер каждого его уровня:
d2 = int[3][4]; // Матрица  из 3 строк и 4 столбцов
Но можно указать только размер первого уровня:
int[][] dd2 =  int[5][]; /* Матрица из 5 строк. Сколько элементов будет в каждой строке пока не известно. */
В последнем случае, можно создать двумерный массив, который не будет являться матрицей из-за того, что в каждой его строке будет разное количество элементов. Например:
for(int i=0; i<5; i++) {
  dd2
[i] = new int[i+2];
}
В результате получим такой вот массив:
0 0
0 0 0
0 0 0 0
0 0 0 0 0
0 0 0 0 0 0
Мы могли создать массив явно указав его элементы. Например так:
int[][] ddd2 = {{1,2}, {1,2,3,4,5}, {1,2,3}};
При этом можно обратиться к элементу с индексом 4 во второй строке ddd2[1][4], но если мы обратимся к элементу ddd2[0][4] или ddd2[2][4] — произойдёт ошибка, поскольку таких элементов просто нет. Притом ошибка это будет происходить уже во время исполнения программы (т. е. компилятор её не увидит).
Обычно всё же используются двумерные массивы с равным количеством элементов в каждой строке.
Для обработки двумерных массивов используются два вложенных друг в друга цикла с разными счётчиками.
Пример (заполняем двумерный массив случайными числами от 0 до 9 и выводим его на жкран в виде матрицы):
int[][] da = new int[6][4];
for(int i=0; i<da.length; i++) {
 
for(int j=0; j<da[i].length; j++) {
    da
[i][j] = (int)(Math.random()*10);
 
}
}
for(int i=0; i<da.length; i++) {
 
for(int j=0; j<da[i].length; j++) {
   
System.out.print(da[i][j] + "\t");
 
}
 
System.out.println(); // Переходим на следующую строку









Немає коментарів:

Дописати коментар