Масиви

Java Syntax Zero
Рівень 6 , Лекція 1
Відкрита

1. Масив — це контейнер елементів

Найімовірніше, ви чули, що комп'ютери можуть обробляти величезні обсяги інформації. Умовний оператор (if-else) і цикли (for, while), звичайно, у цьому допомагають. Однак далеко на них не заїдеш, адже оброблювані дані треба якось зберігати.

На цей випадок у Java, так само як майже в усіх мовах програмування, є одна чудова річ, а саме масиви (Array). Їх також називають таблицями.

Масив — це спеціальний об'єкт, в якому можна зберігати не одне значення, а декілька.

Якщо раніше ми порівнювали змінну з коробкою (де можна зберігати якесь значення), то масив більше схожий на коробку, всередині розділену на секції. Кожна секція в «коробці-масиві» має свій номер. Нумерація, звичайно ж, з нуля...

Ну або можна провести іншу аналогію. Порівняймо індивідуальний житловий будинок і багатоповерхівку. В індивідуальному будинку мешкає одна сім'я, а багатоповерхівка розділена на квартири. Щоб написати листа сім'ї, яка живе в окремому будинку, треба вказати його унікальну адресу. А щоб написати листа сім'ї, яка живе в квартирі, треба вказати унікальну адресу будинку та номер квартири.

Отож змінна-масив — це змінна-багатоповерхівка. У ній можна зберігати не одне значення, а декілька. У такій змінній є кілька квартир (комірок), і до кожної комірки можна звернутися за її номером (індексом).

Для цього в квадратних дужках після імені змінної потрібно вказати індекс комірки, до якої звертаємося. Це досить просто:

array[індекс] = значення;

де аrray — це ім'я змінної-масиву, індекс — номер комірки в масиві, а значення — те значення, яке ми хочемо записати в зазначену комірку.

Однак спершу з'ясуймо, як створювати масиви.


2. Створення масиву елементів у Java

Створення масиву елементів у Java

Припустімо, вашій програмі потрібно десь зберігати 100 цілих чисел. Найімовірніше, для цього підійшов би масив. І як же його створити?

Якби ми хотіли зберігати одне ціле число, нам підійшов би тип int, ну а якщо стоїть завдання зберігати 100 цілих чисел, певно, нам потрібен масив типу int. Отакий вигляд матиме код для його створення:

int[] array = new int[100];

Розберімося, що тут написано.

Як ви вже, мабуть, здогадалися, вираз ліворуч від знака рівності — це оголошення змінної з іменем array типу int[]. Після типу int стоять квадратні дужки, які немовби натякають, що в «коробках» цього типу можна буде зберігати не одне значення, а декілька.

Праворуч від знака рівності відбувається «створення» (слово new) об'єкта на 100 елементів (комірок) типу int. Теж не надто складно.

Якби ми хотіли, приміром, створити масив на 20 комірок для зберігання дійсних чисел, код для його створення мав би приблизно такий вигляд:

double[] vals = new double[20];

Кількість комірок у масиві називають розміром масиву або довжиною масиву. А завдяки здатності зберігати багато значень масиви інакше називають контейнерами.

Важливий факт: розмір контейнера (масиву) не можна змінити після створення.

Можна створити новий, але довжину вже створеного контейнера змінити не вдасться.



3. Робота з комірками масиву

Робота з комірками масиву

Добре, створювати масиви ми навчилися, а як правильно з ними працювати?

Майже так само, як і зі звичайними змінними, тільки після імені змінної-масиву обов'язково треба вказувати номер комірки, з якою ми працюємо.

Нумерація комірок масиву завжди починається з нуля. Якщо маємо масив на 10 елементів, то номери (індекси) його комірок — 0..9, якщо масив на 200 елементів, то 0..199. І далі за аналогією.

Приклади:

Код Пояснення
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
a[9] = a[2] + a[5];
Створюємо масив на 10 елементів типу int.
У комірку з індексом 2 записуємо значення 4.
У комірку з індексом 7 записуємо значення 9.
У комірку з індексом 9 записуємо суму значень, які зберігаються в комірках 2 (зберігається 4) і 5 (зберігається 0).

От що зберігатиметься в пам'яті після виконання цього коду:

Стовпець ліворуч (цифри сірого кольору) — це номери (індекси) комірок. У комірках зберігаються внесені значення: 4, 9 і 4. Відразу після створення масиву всі комірки заповнені нулями.

Важливо! Усі комірки масиву мають однаковий тип даних. Якщо ми створили масив рядків String, у його комірках можна зберігати лише рядки. Тип даних масиву задають під час його створення. Ані тип даних, ані довжину масиву пізніше змінити не можна.


Коментарі (28)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
hidden #3500645 Рівень 30
27 жовтня 2024
Трохи дивує правильна відповідь виконання завдання Задачі 2 (Парні та непарні комірки масиву), де просто вручну присвоюється значення кожній змінній масиву. Окей, тут всього 5 значень, адже масив маленький, але уявімо, що цих комірок 1000, то що, теж будете вручну в кожну записувати значення? не логічніше написати просту умову?

for(int i = 0; i < strings.length; i++)
{
    if (i % 2 == 0)
        strings[i] = EVEN;
    else
        strings[i] = ODD;
}
ZSUnix Рівень 10
16 грудня 2024
або ще простіше:
 
        for(int i = 0; i < strings.length; i++){
             strings[i] = i % 2 == 0 ? EVEN : ODD;
        }
 
для цього й придумали тернарник.
hidden #3500645 Рівень 30
17 грудня 2024
так 👍 погоджуюсь)
unknownpanic Рівень 12
23 жовтня 2024

public class Main {
    public static int[] array = new int[]{-1, 2, 3, -4, -5};
    public static void main(String[] args) {
        for(int i = 0; i < array.length; i++) {
            if ((array[i] % 2) == 0) {
                array[i] = -array[i];
                System.out.println(array[i]);
            }
        }
    }
}
Olelsandr Рівень 7
17 липня 2024
for(int i =0;i <array.length; i++){ array[i]=array[i]%2==0?-array[i]:array[i]; }
Alex Рівень 2
7 серпня 2024
бомба, ні прочитати що ти написав, ні зрозуміти, так тримати, ніндзя!
Ростислав Рівень 32
12 вересня 2024
Написав за допомогою тернарного оператора.
Alex Рівень 2
12 вересня 2024
ааатеперзрозуміло,атоянедужемігпрочитатищотамнаписано
Sergey Рівень 13
25 вересня 2024
Тут буде купа зайвих пере-присвоєнь. Як результат - довше виконання, та фрагментація пам'яті. І було б непогано розставити дужки - так легше читати :)
tterribaess Рівень 6
31 січня 2024
Друга задача, читайте уважно умову
Василь Рівень 4
7 липня 2023
щоб перевести число на протилежне можна помножити його на (-1)
Ігор Рівень 41 Expert
27 квітня 2023
Друга задача, читайте уважно умову, треба перевіряти саме значення елементу масива, а не його індекс
Roma Chernesh Рівень 16
4 грудня 2022
Все просто і ясно розписано за масиви. Лайкую!
bahus520 Рівень 11
17 квітня 2022
В чому проблема, вже давно як почав нову програму в к..нченому Intellij, а воно далі запускає і перевіряє передю прогу7 Вже 2 рази перегружав програму, а воно даі то саме...(
Rena Рівень 8
22 травня 2022
В мене так само було) я роблю так: клікаю на віконечко Solution правою кнопкою і вибираю запуск чи перевірку. Після цього працює як треба. Типу увага Intellliji перемикається саме на той Solution, з яким ви зараз працюєте
Pan Vitali Moroz Рівень 51
9 вересня 2022
наводиш мишенятко на клас або метод и тиснеш виконати трикутник, воно запуститься з місця а от з перевіркою попередньої задачі теж щось було, здається глючне
Василь Рівень 10 Expert
25 березня 2023
в моєму випадку глючить теж і твої поради теж не допомагають(
Me Lex Рівень 12
14 лютого 2022
можна циклом зробити for (int x=0;x<=4;x++) { if (array[x] % 2 == 0) { array[x] = - array[x]; } }
Roman Рівень 13
11 вересня 2022
for (int i =0;i<=4;i++){ if(array[i]%2==0) array[i]=array[i]*(-1); }
Illia Рівень 8
27 грудня 2022
краще так, щоб не помилитись з довжиною масива

for (int i = 0; i < array.length; i++) {
            if (array[i] %2 == 0) {
                array[i] = array[i] * -1;
            }
        }
або

int i = 0;
        while (i < array.length) {
            if (array[i] %2 == 0) {
                array[i] = array[i] * -1;
            }
            i++;
        }
Василь Рівень 10 Expert
25 березня 2023
Добре, що є коментарі), бо ніде в лекції не сказано, що з масивами можна робити такі ж операції що й із звичайними змінними). Дякую, що коментуєте.
Alex Lu Рівень 10
13 січня 2022
https://javarush.com/groups/posts/massivy-java https://javarush.com/groups/posts/1932-koe-chto-o-massivakh