Структуры данных
Бывают случаи, когда нам необходимо хранить большое количество однотипной информации. Например, представим работу электронного журнала. Допустим, что в каком-то классе 15 человек, и этот класс написал самостоятельную работу по математике. После проверки работ, в системе появится 15 оценок. Но как их хранить? Создавать 15 переменных? И это только для одной самостоятельной, а сколько их ещё будет? Тем более, что так информацию обрабатывать очень тяжело. Вы только представьте, как нам придётся искать среднее арифметическое.
double sr = (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13 + a14 + a15) / 15;
И это только 1 класс! А если надо обработать информацию о всей параллели? Или школе? Очевидно, что так хранить оценки не получится. Для хранение и обработки информации были разработаны структуры данных. Мы с вами познакомимся с теми, которые наиболее часто используются в промышленной разработке (массивы, списки, множества и словари).
Массивы
Самая простая структура данных - массив. Если грубо, то массив - такая переменная, в которой лежит много значений одного типа.
Массив - упорядоченный набор однотипных элементов.
Массивы можно создавать следующим образом: указываем тип данных, который будет лежать в массиве и ставим квадратные скобочки. Затем, для инициализации массива, используется кодовое слово new. Мы уже видели это слово при создании Scanner. Как вы уже поняли, это слово используется для создания чего-то нового. Далее, для инициализации массива снова прописывают тип данных, который будет там лежать и в квадратных скобочках указывают количество элементов, которое будет там лежать.
double[] a; // объявление массива, содержащего действительные числа
int[] b = new int[20]; // объявление и инициализация массива, содержащего 20 целых чисел
char[] c = {'c', 'a', 't'}; // объявление массива, содержащего символы и его заполнение
Хорошо, массив мы создали, но что делать дальше? Как его заполнить, вывести на экран и обратиться к какому-либо элементу?
Индексация
Для работы с элементами массива существует индексация. Каждому элементу массива просто присваивается номер, по которому к нему можно обратиться. Для обращения к элементу массива достаточно указать его индекс, после переменной в квадратных скобках.
Например, если у нас есть массив:
int[] a = {5, 3, -4, 8, 5, -1, -2, -9, 0, 5, 4, 3, -4, 5, 3, 2, 5, -5, 4};
То всего в этом массиве 19 элементов, при этом, a[0] = 5, a[18] = 4, a[5] = -1.
Таким образом, можно генерировать массивы с помощью циклов. Создадим массив на 15 элементов, каждый элемент которого равен квадрату его индекса.
class A{
public static void main(String[] args){
int n = 15;
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = i * i;
//Теперь в массиве a лежат квадраты чисел от 0 до 14
}}
Считывание массива
С помощью индексации мы можем считывать массив и выводить его на экран, давайте посмотрим на код, который поможет нам считать значения с клавиатуры и сохранить их в массив. Пусть сначала вводится число n, а потом n чисел, которые нужно считать.
import java.util.Scanner;
class A{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = sc.nextInt();
// теперь в массиве а хранятся все введённые n чисел }
}
Вывод массива на экран
Хорошо, с одной задачей справились, теперь давайте попробуем вывести введённые значения на экран.
import java.util.Scanner;
class A{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = sc.nextInt();
// теперь в массиве а хранятся все введённые n чисел System.out.println(a);
}
}
Запустим программу, введём какие-нибудь числа (например 3 9 2 7) и увидим в консоли нечто подобное:[I@2f0e140b
Давайте разберёмся, что же появилось на экране. Массив - не примитивный тип данных, поэтому его просто так на экран не вывести. Информацию в консоли можно разбить на 2 части - до и после знака @. До собаки указывается тип данных, который вывелся, а после - адрес в памяти компьютера. Обратите внимание, что у вас вторая часть отличается от той, что в примере. А вот первая - такая же: "[I". Это говорит о том, что мы имеем дело с массивом, в котором лежат целые числа.Но как же тогда вывести массив на экран? Поможет простой цикл. Например такой код выведет массив на экран построчно:
import java.util.Scanner;
class A{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = sc.nextInt();
for (int i = 0; i < n; i++)
System.out.println(a[i]);
}
}
Для вывода в на одной строк можно изменить последний цикл так:
import java.util.Scanner;
class A{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = sc.nextInt();
for (int i = 0; i < n; i++)
System.out.print(a[i] + " ");
}
}
Длина массива
Если вдруг оказалось, что у вас есть массив, но вы не знаете его длину, то можно её найти с помощью команды length.
int[] a = {5, 3, -4, 8, 5, -1, -2, -9, 0, 5, 4, 3, -4, 5, 3, 2, 5, -5, 4};
int n = a.length; // в n лежит число 19
Свои вопросы можете задать в телеграмм-канале
Курс по Java - разработке бесплатно(6 урок)
Курс по Java - разработке бесплатно(8 урок)