БАГАТОВИМІРНІ МАСИВИ
Багатовимірні масиви.
Масив може складатися
не тільки з елементів якогось вбудованого типу (int, double і ін.). Але й з
об'єктів якогось існуючого класу і навіть з інших масивів.
Масив який в якості
своїх елементів містить інші масиви називається багатовимірним масивом.
Найчастіше
використовуються двовимірні масиви. Такі масиви можна легко уявити у вигляді
матриці. Кожен рядок якої є звичайним одновимірним масивом, а об'єднання всіх
рядків - двовимірним масивом в кожному елементі якого зберігається посилання на
якусь рядок матриці.
Тривимірний масив
можна уявити собі як набір матриць, кожну з яких ми записали на бібліотечної
картці. Тоді щоб дістатися до конкретного числа спочатку потрібно вказати номер
картки (перший індекс тривимірного масиву), тому вказати номер рядка (другий
індекс масиву) і тільки потім номер елемент в рядку (третій індекс).
Відповідно, для того,
щоб звернутися до елементу n-мірного масиву потрібно вказати n індексів.
Оголошуються масиви
так:
int[] d1; //звичайний
одновимірний масив
int[][] d2; //двовимірний масив
double[][] d3; //Трьохвимірний масив
int[][][][][] d5; //П’ятивимірний масив
int[][] d2; //двовимірний масив
double[][] d3; //Трьохвимірний масив
int[][][][][] d5; //П’ятивимірний масив
При створенні масиву
можна вказати явно розмір кожного його рівня:
d2 = int[3][4]; // прямокутна матриця на 3 рядки
та 4 стовпці
або
int[][] d2 = {{1,2}, {1,2,3,4,5}, {1,2,3}};
Але можна вказувати лише кількість рядків: d2 = int[3][ ]; Тоді можна створити двовимірний масив, у якому в кожному рядку буде різна кількість елементів.
Приклад (даний код вкаже лише на адресу масиву. Він просто
візуалізує вашу уяву):
int[][] dd2 = new int[5][];
for(int i=0; i<5; i++) {
dd2[i] = new int[i+2];
}
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
0 0 0
0 0 0 0
0 0 0 0 0
0 0 0 0 0 0
Зазвичай,
використовуються двовимірні масиви з рівною кількістю елементів у кожному
рядку. Для обробки двовимірних масивів використовуються два вкладених один в
одного циклу з різними лічильниками.
Приклад (заповнюємо
двовимірний масив випадковими числами від 0 до 9 і виводимо його на екран у
вигляді матриці):
public static void main(String[] args) {
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(); // Перехід на інший рядок
}
}
Для доступу до
елементів двовимірного масиву необхідно використовувати 2 індекси:
перший для рядка,
другий - для
стовпчика.
Як і у випадку з
одновимірними масивами, індекси також починаються з нуля. Тому нумерація рядків
і стовпців в таблиці починається з 0.
Коли ми вивчали
цикли, то писали програму яка виводить таблицю множення. Давайте напишемо
програму «Таблиця множення» використовуючи масив.
1.
Створюємо проект
«multiplicationTable».
2.
Створюємо один клас “Dispatcher” із методом main.
3.
Оголошуємо
двовимірний масив розміром 10 × 10.
4.
Виділяємо пам’ять під
елементи. Нагадаю, що числа у нашому масиві будуть цілі.
5.
За допомогою циклу
заповнюємо масив елементами
6.
Виведемо у консоль
нашу таблицю.
І що ми побачимо? А
те що наші елементи будуть виведені, і таблиця буде правильно порахована, але
зовсім не читаємою, не зрозуміло де відповідь при перетині двох значень. Щоб
вирішити цю проблему можна використати наступний символьний запис табуляції: «\t»
І тоді, у вас вийде
ось така рівненька таблиця.
Багатовимірні
масиви бувають симетричними та не симетричними.
Приклад
симетричного масиву ми тільки що створили і розглянули.
Давайте
створимо не симетричний масив.
1. Оголосимо масив а1, та виділимо місце у пам’яті .
2. Для кожного рядка оголосимо кількість елементів
3. Виведемо за допомогою циклу масив на екран.
public static void main(String[] args) {
int [][] a1 = new int [5][];
a1[0] = new int [1];
a1[1] = new int [2];
a1[2] = new int [3];
a1[3] = new int [4];
a1[4] = new int [5];
for(int i = 0; i<a1.length;i++){
for(int j = 0; j<a1[i].length;j++){
System.out.print(a1[i][j] + " ");
}
System.out.println();
}
}
Сортування елементів
масиву.
Ми вже навчилися
виконувати різні дії із елементами масиву, але найчастіше програмісту
доводиться виконувати упорядкування даних. Інакше кажучи, сортувати,
упорядковувати елементи масиву.
Сортування масиву –
це процес упорядкування елементів масиву за зростанням чи спаданням.
Вам мабуть прийшло на
подумки, що тут немає нічого складного. Треба знайти найменший елемент масиву і
змінити його місце із початковим (першим) елементом… І ви були праві! Такий
спосіб сортування називається сортування вибором.
Створим новий проект
і розглянемо сортування елементів масиву вибором.
Ще один різновид циклу for. Цикл for each.
For each – використовується для роботи із
колекціями / масивами. Він перебирає елементи масиву / колекції.
Синтаксис:
for(ініціалізація : ітерація){ }
ініціалізація – це нам вже знаймо : int I = 0;
ітерація – це масив / колекція. А точніше це
всі його елементи.
foreach це скороциний запис при роботі із масивами.
цикл for each не вимагає ручного зміни
змінної - кроку для перебору. Він просто виконує свою роботу.
Комментарии
Отправить комментарий