Если переменные предназначены для хранения одиночного значения, то массив представляет набор однотипных значений. Объявление массива похоже на объявление переменной:
1 |
<i>тип_данных название_массива[]</i>, либо <i>тип_данных[] название_массива</i>. |
Например,
1 2 |
int nums[]; char[] stroka; |
Вместе с объявлением мы можем сразу же создать массив:
1 2 3 |
int nums[] = new int[4]; char[] stroka; stroka = new char[6]; |
Создание массива производится с помощью следующей конструкции: new тип_данных[количество_элементов]
, где new — ключевое слово, выделяющее память для указанного в скобках количества элементов. Например, int nums[] = new int[4];
— в этом выражении создается массив из четырех элементов int и каждый элемент по умолчанию равен нулю.
После создания массива мы можем обратиться к любому его элементу и изменить его:
1 2 3 4 5 6 7 |
int[] nums = new int[4]; nums[0] = 1; nums[1] = 2; nums[2] = 4; nums[3] = 100; System.out.println(nums[3]); |
Отсчет элементов массива начинается с 0, поэтому в данном случае, чтобы обратиться к четвертому элементу в массиве, нам надо использовать выражение nums[3]
.
И так как у нас массив определен только для 4 элементов, то мы не можем обратиться, например, к шестому элементу: nums[5] = 5;
. Если мы так попытаемся сделать, то мы получим ошибку.
В предыдущем примере мы сначала создали массив, а потом по отдельности проинициализировали каждый его элемент. Однако есть и альтернативные пути инициализации массивов:
1 2 3 4 |
// эти два способа равноценны int[] nums2 = new int[] { 1, 2, 3, 5 }; int[] nums3 = { 1, 2, 3, 5 }; |
Здесь мы сразу указываем все элементы массива.
Многомерные массивы
Ранее мы рассматривали одномерные массивы, которые можно представить как цепочку или строку однотипных значений. Но кроме одномерных массивов также бывают и многомерными. Наиболее известный многомерный массив — таблица, представляющая двухмерный массив:
1 2 3 |
int[] nums1 = new int[] { 0, 1, 2, 3, 4, 5 }; int[][] nums2 = { { 0, 1, 2 }, { 3, 4, 5 } }; |
Визуально оба массива можно представить следующим образом:
Одномерный массив nums1
0 | 1 | 2 | 3 | 4 | 5 |
Двухмерный массив nums2
0 | 1 | 2 |
3 | 4 | 5 |
Поскольку массив nums2 двухмерный, он представляет собой простую таблицу. Его также можно было создать следующим образом: int[][] nums2 = new int[3][3];
. Количество квадратных скобок указывает на размерность массива. А числа в скобках — на количество строк и столбцов. И также, используя индексы, мы можем использовать элементы массива в программе:
1 2 3 |
// установим элемент первого столбца второй строки nums2[1][0]=44; System.out.println(nums2[1][0]); |
Объявление трехмерного массива могло бы выглядеть так:
int
[][][] nums3 =
new
int
[
2
][
3
][
4
];
Массив массивов
Многомерные массивы могут быть также представлены как «зубчатые массивы». В вышеприведенном примере двухмерный массив имел 3 строчки и три столбца, поэтому у нас получалась ровная таблица. Но мы можем каждому элементу в двухмерном массиве присвоить отдельный массив с различным количеством элементов:
1 2 3 4 |
int[][] nums = new int[3][]; nums[0] = new int[2]; nums[1] = new int[3]; nums[2] = new int[5]; |
Работа с массивами и класс Arrays
Важнейшее свойство, которым обладают массивы, является свойство length, возвращающее длину массива, то есть количество его элементов: int length = nums.length;
Для работы с массивами в библиотеке классов Java в пакете java.util определен специальный класс Arrays. С его помощью мы можем производить ряд операций над массивами.
Копирование массивов
Массивы, также как и переменные, мы можем присваивать:
1 2 3 4 5 |
int[] numbers = new int[] { 1, 2, 3, 5 }; int[] figures = numbers; figures[2]=30; System.out.println(numbers[2]); // равно 30 |
Здесь два массива, второму присваивается первый массив. Однако на самом деле при присвоении переменная figures будет хранить ссылку на область в памяти, где находится массив. В итоге и figures и numbers будут указывать на один и тот же массив, и если мы изменим элемент в массиве figures figures[2]=30
, то изменится и массив numbers, так как это фактически один и тот же массив. Чтобы такой проблемы избежать, надо использовать копирование массивов.
Для копирования используется метод Arrays.copyOf
:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.Arrays; public class Program { public static void main(String[] args) { int[] numbers = new int[] { 1, 2, 3, 5 }; int[] figures = Arrays.copyOf(numbers, numbers.length); figures[2]=30; System.out.println(numbers[2]); // равно 3 } } |
Метод Arrays.copyOf(numbers, numbers.length)
принимает два параметра: первый параметр — массив, который надо скопировать, а второй параметр — сколько элементов надо скопировать.
Сортировка
С помощью метода Arrays.sort
можно отсортировать массив:
1 2 3 4 5 6 7 8 |
// элементы массива в произвольном порядке int[] numbers = new int[] { 1, 7, 3, 5, 2, 6, 4 }; Arrays.sort(numbers); // в цикле выводим все элементы массива по порядку for(int i=0;i<numbers.length;i++) System.out.println(numbers[i]); |
ЗАДАЧИ ПО МАССИВАМ
Для тех кто дочитал до конца — БОНУС
ОСНОВНЫЕ ЗАДАНИЯ
простые задания
— Найти среднее арифметическое в одномерном массиве состоящем из чисел
— Найти сумму элементов в двухмерном массиве
— Найти среднее арифметическое в двухмерном массиве
— Максимальное и минимальное значение в одномерном массиве, и поменять их местами
— Найти максимальное и минимальное значение в двухмерном массиве и поменять их местами.
средние задания
— Заполнить двухмерный массив случайными числами
— Повернуть матрицу(Двухмерный массив). Матрица квадратная.
— Найти строку в двухмерном массиве, имеющую самую большую сумму элементов
— Найти строку в двухмерном массиве, имеющую минимальную сумму элементов
— Поменять местами самую большую и самую маленькою строку. (Из предидущих двух заданий)
сложные задания
— Умножить две матрицы.
— Сортировать двухмерный массив.
— Выводить числа фибоначчи(В некотором количестве, заданной переменной). С информацией ознакомится самостоятельно!
ДОП ЗАДАНИЯ
простые задание для тех кому нужна дополнительная тренировка
1. из трех чисел, заданных как переменные а0, а1, а2 — найти максимальное и минимальное значение.
2. вывести первую половину массива.
3. вывести вторую половину массива.
4. скопировать данные из первого массива во второй.
5. написать программу решение квадратного уравнения.
6. вывести все слова в предложении(Слова разделены одним пробелом)
7. вывести слова из предложения, имеющие одинаковую длину.
Более сложные задания
1. инвертировать массив в обратном направлении
2. сортировать массив двумя разными способами
3. удалить из предложения слова которые повторяются. (Слова разделенны одним пробелом)
4. найти самое длинное слово в строке(разделенное одним пробелом)
5. сложить две двухмерные матрицы(одинаковой размерности), в третюю, и вывести её содержимое
6. найти максимальное число в двухмерном массиве(тип — int[][])
7. сортировать двухмерный массив по возрастанию