3. 3
Массивы
Массив можно
представить, как набор
пронумерованных ячеек, в
каждую из которых можно
поместить данные, но
только один элемент
данных в одну ячейку.
Доступ к конкретной
ячейке осуществляется
через её номер.
4. 4
Массивы
Элементами могут быть значения простых и ссылочных
типов
Массивы сами по себе являются объектами и наследуют
от класса Object
Индекс 0 1 2 3 4 5 6 7
Значение -5 3 4 8 8 2 1 3
Индекс 0 1 2 3 4 5 6 7
Значение Китай США Россия Канада ЮАР Франция Южная Корея Индия
5. Доступ к элементам массива
5
Доступ к элементам массива осуществляется по целочисленному индексу с
помощью оператора []
Индекс 0 1 2 3 4 5 6 7
Значение Китай США Россия Канада ЮАР Франция Южная Корея Индия
countries
countries[2]
2
Россия
6. 6
Объявление, инициализация, заполнение
Объявление
Инициализация
Заполнение
Способ «3 в 1»
int[] array;
byte[] b = {0, 2, 4, 8, 16, 32};
array = new int[20];
int oldFishion[];
array[0] = 10;
array[1] = 15;
passToMethod(new long[] {1, 2, 3, 4, 5});
7. 7
Работа с одномерными массивами
Форма объявления ссылки на массив с квадратными скобками после типа
элемента является более предпочтительной
Объект массива создается с помощью оператора new
Массив при этом заполняется значениями по умолчанию для типа его
элементов (0, false или null)
Нумерация в массивах начинается с 0
Длина массива хранится в публичном неизменяемом поле length
Изменить длину массива после создания его объекта невозможно
8. 8
Заполнение массива случайными числами
java.util.Random rnd = new java.util.Random();
int array[] = new int[20];
for (int i = 0; i < array.length; i++)
array[i] = rnd.nextInt(100);
9. 9
Печать массива
public class Main {
public static void main(String[] args) {
int array[] = new int[20];
for (int i = 0; i < array.length; i++)
System.out.printf("array[%d]=%dn",i,array[i]);
}
}
10. Класс java.util.Arrays
Метод void sort(int[] myArray, int, int toIndex) сортирует
массив целых чисел или его часть (от fromIndex до
toIndex) по возрастанию.
Метод ищет int binarySearch(int[] myArray, int fromIndex,
int toIndex, int key) элемент key в уже отсортированном
массиве myArray или его части (от fromIndex до toIndex).
Если элемент найден, метод возвращает его индекс, если
нет -1.
Метод String toString(int[] myArray) преобразовывает
массив к строке. 10
11. 11
Пример java.util.Arrays
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] array = {1, 5, 4, 3, 7}; //объявляем и инициализируем массив
System.out.println(Arrays.toString(array));//печатаем массив
Arrays.sort(array); //сортируем массив
System.out.println(Arrays.toString(array));//отсортированный массив
int key = Arrays.binarySearch(array, 5); // ищем число 5
System.out.println(key);//распечатываем индекс числа 5
}
}
12. Задача №1
Сгенерировать массив строк из 36 элементов,
представляющий колоду игральных карт. Каждая карта
представлена мастью (♠, ♣, ♥, ♦) и достоинством (6, 7, 8, 9,
10, В, Д, К, Т). Например, «♣10».
а) вывести массив на консоль;
b) перемешать колоду.
12
14. Задача №1: решение
14
char suits[] = {'u2660', '♥' /*'u2665'*/, 'u2663', 'u2666'};
String values[] = {"6", "7", "8", "9", "10", "В", "Д", "К", "T"};
String cards[] = new String[36];
int count = 0;
for (int i = 0; i < 4; i++)
for (int j = 0; j < values.length; j++)
cards[count++] = suits[i]+values[j];
System.out.println(java.util.Arrays.toString(cards));
Random rnd = new Random();
for (int i=0; i<cards.length*2; i++)
{
int k = rnd.nextInt(cards.length);
int m = rnd.nextInt(cards.length);
String temp = cards[m];
cards[m] = cards[k];
cards[k] = temp;
}
System.out.println(java.util.Arrays.toString(cards));
15. Задача №3
В странах Востока использовался календарь, представляющий собой 60-летнюю циклическую
систему. Каждый 60-летний цикл состоит из пяти 12-летних подциклов. В каждом подцикле года носят
названия животных: Крыса, Корова, Тигр, Заяц, Дракон, Змея, Лошадь, Овца, Обезьяна, Петух,
Собака и Свинья.
Кроме того, в названии года фигурируют цвета животных, которые связаны с пятью элементами
природы — Деревом (зеленый), Огнем (красный), Землей (желтый), Металлом (белый) и Водой
(черный).
В результате каждое животное (и его год) имеет символический цвет, причем цвет этот часто
совершенно не совпадает с его "естественной" окраской — Тигр может быть черным, Свинья — красной,
а Лошадь — зеленой.
Например, 1984 год — год начала очередного цикла — назывался годом Зеленой Крысы. Каждый цвет
в цикле (начиная с зеленого) "действует" два года, поэтому через каждые 60 лет имя года (животное и его
цвет) повторяется.
Составить программу, которая по заданному номеру года нашей эры n печатает его название по
описанному календарю в виде: "Крыса, Зеленый".
15
16. Задача №3
Используя датчик случайных чисел, заполнить массив из
двадцати элементов неповторяющимися числами.
16
17. Задача №4
Дан массив ненулевых целых чисел. Определить, сколько
раз элементы массива при просмотре от его начала меняют
знак. Например, в массиве 10, –4, 12, 56, –4, –89 знак
меняется 3 раза.
17
18. 18
Многомерные массивы
Состоят из одномерных массивов, элементами которых
являются ссылки на массивы меньшей размерности
При создании объекта необязательно указывать все
размерности
Массив необязательно должен быть «прямоугольным»
// Автоматическая
int[][] twoDimArr = new int[10][5];
// Вручную
int[][] twoDimArr = new int[10][];
for (int i = 0; i < 10; i++)
twoDimArr[i] = new int[i];
// Явно
int[][] arr3 = { {0}, {0, 1}, {0, 2, 4} };
19. 19
Печать двумерного массива
int[][] arr = { {30, 5}, {0, 1}, {10, 30, 20} };
for (int j = 0; j < arr.length; j++) {
for (int i = 0; i < arr[j].length; i++)
System.out.printf("%3d", arr[j][i]);
System.out.println();
}
20. Просмотр массива с помощью foreach
20
int[] array = new int[] { 1, 2, 3, 4, 5 };
for (int i : array){
System.out.println(i);
}
21. Домашнее задание: Задача №1
При выборе места строительства жилого комплекса при металлургическом
комбинате необходимо учитывать "розу ветров" (следует расположить жилой
комплекс так, чтобы частота ветра со стороны металлургического комбината
была бы минимальной).
Для этого в течение года проводилась регистрация направления ветра в
районе строительства. Данные представлены в виде массива, в котором
направление ветра за каждый день кодируется следующим образом:
1 — северный, 2 — южный, 3 — восточный, 4 — западный, 5 — северо-
западный, 6 — северо-восточный, 7 — юго-западный, 8 — юго-восточный.
Определить, как должен быть расположен жилой комплекс по отношению к
комбинату.
21
22. 22
Домашнее задание: Задача №2
Пользователь с помощью консоли вводит количество строк и
количество столбцов двумерного массива. Разработать программу,
заполняющую массив натуральными числами «змейкой» как
показано на рисунке нет.