У Java масиви дають змогу зберігати кілька значень одного типу в одній структурі. На відміну від інших структур даних, масиви після створення мають фіксований розмір. Елементи можна присвоювати масиву або отримувати з нього за допомогою індексу. У масивах Java індексація починається з нуля: індекс першого елемента дорівнює 0, індекс другого - 1, і так далі.
Ось стандартний синтаксис ініціалізації масиву:
type[] variableName = new type[size];
type позначає тип елементів масиву, який може бути примітивним типом (наприклад, int) або класом (наприклад, String).
size задає кількість елементів, які може вмістити цей масив (її не можна буде змінити пізніше).
Після створення масиву елементи ініціалізуються своїми типовими значеннями (зазвичай 0, false або null).
// Declare array with explicit size (size is 2)
int[] twoInts = new int[2];
Масиви також можна визначати за допомогою скороченого запису, який дає змогу одночасно створити масив і встановити його значення:
// Two equivalent ways to declare and initialize an array (size is 3)
int[] threeIntsV1 = new int[] { 4, 9, 7 };
int[] threeIntsV2 = { 4, 9, 7 };
Оскільки компілятор тепер може визначити, скільки елементів буде в масиві, довжину можна не вказувати.
Присвоювати елементи масиву й звертатися до них можна за допомогою індексної нотації в квадратних дужках:
// Assign second element by index
twoInts[1] = 8;
// Retrieve the second element by index and assign to the int element
int secondElement = twoInts[1];
Спроба звернутися до індексу, який виходить за межі допустимих індексів масиву, призводить до IndexOutOfBoundsException.
Масивами можна керувати, або викликаючи методи чи властивості екземпляра масиву, або використовуючи статичні методи, визначені в класі Arrays (зазвичай вони використовуються лише в узагальненому коді).
Властивість length містить довжину масиву.
До неї можна звернутися так:
int arrayLength = someArray.length;
Java також надає корисний допоміжний клас java.util.Arrays із багатьма корисними методами для роботи з масивами (наприклад, Arrays.equals).
Java також підтримує багатовимірні масиви, як-от int[][] arr = new int[3][4];, що можуть бути дуже корисними.
Те, що масив також є колекцією, означає, що, крім доступу до значень за індексом, можна перебирати всі його значення за допомогою циклу for-each:
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
for(char vowel: vowels) {
// Output the vowel
System.out.print(vowel);
}
// => aeiou
Якщо потрібен більший контроль над тим, які значення перебирати, можна використати цикл for:
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
for (int i = 0; i < 3; i++) {
// Output the vowel
System.out.print(vowels[i]);
}
// => aei
Ми захоплюємося спостереженням за птахами і ведемо облік того, скільки птахів завітало до нашого саду за останні сім днів.
На нас чекає шість завдань, і всі вони стосуються кількості птахів, які завітали до нашого саду.
Для порівняння ми завжди тримаємо поруч копію підрахунків минулого тижня, які були такими: 0, 2, 5, 3, 7, 8 і 4. Реалізуйте метод BirdWatcher.getLastWeek(), який повертає підрахунки минулого тижня:
BirdWatcher.getLastWeek();
// => [0, 2, 5, 3, 7, 8, 4]
Реалізуйте метод BirdWatcher.getToday(), який повертає кількість птахів, що завітали до нашого саду сьогодні. Підрахунки птахів упорядковано за днями: перший елемент - це підрахунок найдавнішого дня, а останній - сьогоднішній підрахунок.
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getToday();
// => 1
Реалізуйте метод BirdWatcher.incrementTodaysCount(), який збільшує сьогоднішній підрахунок на одиницю:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.incrementTodaysCount();
birdCount.getToday();
// => 2
Реалізуйте метод BirdWatcher.hasDayWithoutBirds(), який повертає true, якщо був день, коли до саду не завітав жоден птах, а інакше повертає false:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.hasDayWithoutBirds();
// => true
Реалізуйте метод BirdWatcher.getCountForFirstDays(), який повертає кількість птахів, що завітали до нашого саду від початку тижня, але обмежує підрахунок указаною кількістю днів від початку тижня.
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getCountForFirstDays(4);
// => 14
Деякі дні бувають насиченішими за інші. Насичений день - це день, коли до нашого саду завітало пʼять або більше птахів.
Реалізуйте метод BirdWatcher.getBusyDays(), який повертає кількість насичених днів:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getBusyDays();
// => 2
Зареєструйтеся на Exercism, щоб вивчати й опановувати Java, а також 26 концепцій158 вправ та справжнє наставництво від людей, і все це безкоштовно.