Лабораторная работа 5. Работа с многмерными массивами
Цель работы: Использование многомерных массивов при работе с Java
Форма предоставления отчета: демонстрация результатов выполнения работы и защита подготовленного отчета согласно представленному варианту индивидуального задания.
Краткая теория по теме.
МНОГОМЕРНЫЕ МАССИВЫ
Массив может состоять не только из элементов какого-то встроенного типа (int, double и пр.), но и, в том числе, из объектов какого-то существующего класса и даже из других массивов.
Массив который в качестве своих элементов содержит другие массивы называется многомерным массивом.
Чаще всего используются двумерные массивы. Такие массивы можно легко представить в виде матрицы. Каждая строка которой является обычным одномерным массивом, а объединение всех строк — двумерным массивом в каждом элементе которого хранится ссылка на какую-то строку матрицы.
Для того, чтобы обратиться к элементу n-мерного массива нужно указать n индексов.
Объявляются массивы следующим образом:
int[] d1; //Обычный, одномерныйint[][] d2; //Двумерныйdouble[][] d3; //Трёхмерныйint[][][][][] d5; //ПятимерныйПри создании массива можно указать явно размер каждого его уровня:
d2 = int[3][4]; // Матрица из 3 строк и 4 столбцовНо можно указать только размер первого уровня:
int[][] dd2 = int[5][]; /* Матрица из 5 строк. Сколько элементов будет в каждой строке пока не известно. */В последнем случае, можно создать двумерный массив, который не будет являться матрицей из-за того, что в каждой его строке будет разное количество элементов. Например:
for(int i=0; i<5; i++) { dd2[i] = new int[i+2];}В результате получим массив:
0 00 0 00 0 0 00 0 0 0 00 0 0 0 0 0Можно создать массив, явно указав его элементы. Например, так:
int[][] ddd2 = {{1,2}, {1,2,3,4,5}, {1,2,3}};При этом можно обратиться к элементу с индексом 4 во второй строке ddd2[1][4], но если мы обратимся к элементу ddd2[0][4 ] или ddd2[2][4] — произойдёт ошибка, поскольку таких элементов нет. Притом ошибка — это будет происходить уже во время исполнения программы (т.е. компилятор её не увидит).
Обычно всё же используются двумерные массивы с равным количеством элементов в каждой строке.
Для обработки двумерныхмассивов используются два вложенных друг в друга цикла с разными счётчиками.
Пример (заполняем двумерный массив случайными числами от 0 до 9 и выводим его на экран в виде матрицы):
int[][] da = new int[6][4];for(int i=0; i<da.length; i++) { for(int j=0; j<da[i].length; j++) { da[i][j] = (int)(Math.random()*10); }}for(int i=0; i<da.length; i++) { for(int j=0; j<da[i].length; j++) { System.out.print(da[i][j] + "\t"); } System.out.println(); // Переходим на следующую строку}В листинге 2.9 приведен пример программы, вычисляющий первые 10 строк треугольника Паскаля, заносящей их в треугольный массив и выводящей его элементы в консоль.
Листинг 2.9. Треугольник Паскаля.
+Задание
Создать классы, спецификации которых приведены ниже. Определить конструкторы и методы set Тип (), get Тип (), toString(). Определить дополнительно методы в классе, создающем массив объектов. Задать критерий выбора данных и вывести эти данные на консоль. В каждом классе, обладающем информацией, должно быть объявлено несколько конструкторов.
№ варианта | Задание |
Student: id, Фамилия, Имя, Отчество, Дата рождения, Адрес, Телефон, Факультет, Курс, Группа. Создать массив объектов. Вывести: список студентов заданного факультета, списки студентов для каждого факультета и курса. | |
Customer: id, Фамилия, Имя, Отчество, Адрес, Номер кредитной карточки, Номер банковского счета. Создать массив объектов. Вывести: список покупателей в алфавитном порядке, список покупателей, у которых номер кредитной карточки находится в заданном интервале. | |
Patient: id, Фамилия, Имя, Отчество, Адрес, Телефон, Номер медицинской карты, Диагноз. Создать массив объектов. Вывести: список пациентов, имеющих данный диагноз, список пациентов, номер медицинской карты которых находится в заданном интервале. | |
Abiturient: id, Фамилия, Имя, Отчество, Адрес, Телефон, Оценки. Создать массив объектов. Вывести: список абитуриентов, имеющих неудовлетворительные оценки, список абитуриентов, у которых сумма баллов выше заданной. | |
Book: id, Название, Автор (ы), Издательство, Год издания, Количество стра- ниц, Цена, Тип переплета. Создать массив объектов. Вывести: список книг заданного автора, список книг, выпущенных заданным издательством, список книг, выпущенных после заданного года. | |
House: id, Номер квартиры, Площадь, Этаж, Количество комнат, Улица, Тип здания, Срок эксплуатации. Создать массив объектов. Вывести: список квартир, имеющих заданное число комнат, список квартир, имеющих заданное число комнат и расположенных на этаже, который находится в заданном промежутке, список квартир, имеющих площадь, превосходящую заданную. | |
Phone: id, Фамилия, Имя, Отчество, Адрес, Номер кредитной карточки, Дебет, Кредит, Время городских и междугородных разговоров. Создать массив объектов. Вывести: сведения об абонентах, у которых время внутригородских разговоров превышает заданное, сведения об абонентах, которые пользовались междугородной связью, сведения об абонентах в алфавитном порядке. | |
Car: id, Марка, Модель, Год выпуска, Цвет, Цена, Регистрационный номер. Создать массив объектов. Вывести: список автомобилей заданной марки, список автомобилей заданной модели, которые эксплуатируются больше n лет, список автомобилей заданного года выпуска, цена которых больше указанной. | |
Product: id, Наименование, Производитель, Цена, Срок хранения, Количество. Создать массив объектов. Вывести: список товаров для заданного наименования, список товаров для заданного наименования, цена которых не превосходит заданную. | |
Train: Пункт назначения, Номер поезда, Время отправления, Число мест (общих, купе, плацкарт, люкс). Создать массив объектов. Вывести: список поездов, следующих до заданного пункта назначения, список поездов, следующих до заданного пункта назначения и отправляющихся после заданного часа. | |
Bus: Фамилия и инициалы водителя, Номер автобуса, Номер маршрута, Марка, Год начала эксплуатации, Пробег. Создать массив объектов. Вывести: список автобусов для заданного номера маршрута, список автобусов, которые эксплуатируются больше заданного срока. | |
Airline: Пункт назначения, Номер рейса, Тип самолета, Время вылета, Дни недели. Создать массив объектов. Вывести: список рейсов для заданного пункта назначения, список рейсов для заданного дня недели. | |
Student: id, Фамилия, Имя, Отчество, Дата рождения, Адрес, Телефон, Факультет, Курс, Группа. Создать массив объектов. Вывести: список студентов, родившихся после заданного года, список учебной группы. | |
Abiturient: id, Фамилия, Имя, Отчество, Адрес, Телефон, Оценки. Создать массив объектов. Вывести: выбрать заданное число n абитуриентов, имеющих самую высокую сумму баллов (вывести также полный список абитуриентов, имеющих полупроходную сумму). | |
Train: Пункт назначения, Номер поезда, Время отправления, Число мест (общих, купе, плацкарт, люкс). Создать массив объектов. Вывести: список поездов, отправляющихся до заданного пункта назначения и имеющих общие места | |
Bus: Фамилия и инициалы водителя, Номер автобуса, Номер маршрута, Марка, Год начала эксплуатации, Пробег. Создать массив объектов. Вывести: список автобусов, пробег у которых больше заданного расстояния. | |
Airline: Пункт назначения, Номер рейса, Тип самолета, Время вылета, Дни недели. Создать массив объектов. Вывести, список рейсов для заданного дня недели, время вылета для которых больше заданного. | |
Product: id, Наименование, Производитель, Цена, Срок хранения, Количество. Создать массив объектов. Вывести: список товаров, срок хранения которых больше заданного, список товаров заданного производителя. | |
Создать суперкласс Учащийся и подклассы Школьник и Студент. Создать массив объектов суперкласса и заполнить этот массив объектами. Показать отдельно студентов и школьников. | |
Создать базовый класс Садовое дерево и производные классы Яблоня, Вишня, Груша и другие. С помощью конструктора автоматически установить номер каждого дерева. Принять решение о пересадке каждого дерева в зависимости от возраста и плодоношения. |