
- •Классы-коллекции
- •Интерфейсы-коллекции
- •Интерфейс Collection
- •Интерфейс List
- •Интерфейс Set
- •Интерфейс Queue
- •Класс ArrayList
- •Паттерн проектирования Iterator
- •Класс LinkedList
- •Классы-множества
- •Интерфейс SortedSet и интерфейс Comparator
- •Понятие ассоциативного массива
- •Интерфейс Map
- •Класс Hashmap
- •Класс LinkedHashMap
- •Класс TreeMap
- •Класс WeakHashMap
- •Интерфейс SortedMap
- •Пример работы с ассоциативными массивами
- •Классы-оболочки
- •Работа с датой и временем
- •Генерация случайных чисел
- •Ход работы:
- •Задание 1
- •Задание 2
- •Задание №3
- •Контрольные вопросы:
Генерация случайных чисел
В пакете java.util описан класс Random, являющийся генератором случайных чисел. На самом деле в силу своей природы ЭВМ не может генерировать истинно случайные числа. Числа генерируются определенным алгоритмом, причем каждое следующее число зависит от предыдущего, а самое первое – от некоторого числа, называемого инициализатором. Две последовательности «случайных» чисел, сгенерированных на основе одного инициализатора, будут одинаковы.
Класс Random имеет два конструктора:
Random() – создает генератор случайных чисел, использующий в качестве инициализатора текущую дату (число миллисекунд с 1 января 1970);
Random(long seed) – создает генератор случайных чисел, использующий в качестве инициализатора число seed.
Рекомендуется использовать первый конструктор, чтобы генератор выдавал разные случайные числа при каждом новом запуске программы.
От генератора можно получать случайные числа нужного типа с помощью методов nextBoolean(), nextInt(), nextLong(), nextFloat(), nextDouble(). Вещественные числа генерируются в диапазоне от 0 до 1 (не включая 1), а целые – из всего диапазона возможных значений. Можно сгенерировать целое число в нужном диапазоне (от 0 до max-1) методом nextInt(int max) или nextLong(long max).
Наконец, можно заполнить случайными числами целый массив (предварительно созданный), воспользовавшись методом nextBytes(byte[] arr). Элементы массива arr должны иметь тип byte.
Ход работы:
Выполнить все упражнения приведенные в теоретических сведениях.
Выполните задание 1, 2, 3 согласно варианту по списку.
Отчет по лабораторной работе должен содержать: название и цель лабораторной работы, код программы для заданий №1, 2, 3 и из хода работы. В конце отчета выводы по проделанной работе.
Задание 1
Задача о Ханойской башне: переместить 5 дисков со стержня 1 на стержень 3, используя промежуточный стержень 2 и соблюдая законы:
диски можно перемещать с одного стержня на другой только по одному;
нельзя класть больший диск на меньший;
нельзя откладывать диски в сторону, при переносе дисков с одного стержня на другой можно использовать промежуточный третий стержень, на котором диски должны находиться тоже только в виде пирамиды, сужающейся кверху.
Каждый диск представить в виде класса, содержащий цвет и размер. Для представления башен использовать класс-коллекцию. Для индикации работы программы выводить в консоль последовательность действий, которую должен совершать пользователь и состояние трех башен после очередного перемещения в каждый момент времени.
2. Дана нитка с нанизанными на неё 20 черными и красными шариками (10 черных и 10 красных) в произвольном порядке. Доступ к шарикам возможен только с двух краев. Переместить шарики на новую пустую нитку так, чтобы черные и красные шарики чередовались, используя третью вспомогательную нитку. Для хранения нитей с шариками использовать класс-коллекцию список. Доступ возможен только к первому или последнему элементу списка. Начальная нитка с шариками формируется случайным образом. Выводить в консоль последовательность действий при перемещении шариков и схематическое расположение шариков, например:
Начальная нить:
–R–B–B–B–R–R–R–B–R–R–B–B–R–B–B–B–R–R–B–R–,
Новая нить:
–
Промежуточная нить:
–
где R – красный шарик, B – черный шарик.
3. Задана символьная строка, в которой используются скобки трех видов (), [], {}. Определить верно ли расставлены скобки. Для хранения символов использовать список.
4. Напишите методы substraction(Set set1, Set set2) и simsubstraction (Set set1, Set set2), реализующие операции разности и симметрической разности двух множеств. Протестируйте работу этих методах на двух предварительно заполненных множествах. (Вам понадобится написать вспомогательный метод, выводящий все элементы множества в консоль).
Разностью множеств A–B называется множество всех тех и только тех элементов A, которые не содержатся в В. Симметрической разностью множеств А и В является множество всех тех и только тех элементов, которые принадлежат только одному из двух множеств А или В, но не обоим одновременно.
5. Напишите методы Cartesian_product(Set set1, Set set2) и Bulean(Set set1), реализующие операции декартового произведения двух множеств и определения булеана множества. Протестируйте работу этих методах на двух предварительно заполненных множествах. (Вам понадобится написать вспомогательный метод, выводящий все элементы новых множеств в консоль).
Декартово (прямое) произведение
множеств A и B,
обозначаемое
– множество всех пар
,
таких, что
,
.
Объект
называется упорядоченной парой
с первой компонентой a
и второй компонентой b.
Множество всех подмножеств
множества А, или булеан множества
А, обозначаемый – множество, состоящее
из всех подмножеств множества А.
Множество А, называется подмножеством
множества B,
если является частью множества В.
6. По конвейеру движутся детали (Д1, Д2, Д3) в произвольном порядке. Автомат формирует комплекты, состоящие из одной детали 1, 2, 3. При поступлении повторяющихся деталей они должны сбрасываться в бункер и отправляться в конец конвейера. Для преставления конвейера использовать класс-коллекцию очередь. Протестируйте работу автомата, формируя конвейер из 40 деталей, расположенных в произвольном порядке. Выводить в консоль последовательность действий при перемещении деталей и схематическое расположение деталей на конвейере, например:
–D1–D2–D2–D1–D1–D1–D3–…
Переместить D1 в готовый комплект
или
Сбросить D1 в бункер и поместить в конец конвейера
7. На шахматную доску 8х8 случайным образом ставятся 4 фигуры: ферзь, ладья, слон и конь – объекты типа ChessMan. Определить может ли какая-то фигура побить другую. Для хранения шахматных фигур использовать класс-коллекцию список. Ферзь бьет все фигуры стоящие с ним на одной вертикали, горизонтали или диагонали. Ладья бьет все фигуры стоящие с ней на одной вертикали или горизонтали. Слон бьет все фигуры стоящие с ним на одной диагонали. Конь бьет все фигуры, расположенные буквой «Г» относительно него. Протестировать работу программы, задав произвольно расположение фигур, путем ввода с клавиатуры или случайным образом. На экран должны выдаваться фигуры, которые могут побить друг друга и их координаты, например:
«Ферзь 4,4 бьет ладью 8,8»
или
«Никакая фигура не бьет другую».
8. Используя одну из коллекций реализовать руку игрока с картами в карточной игре. Учесть, что карты в руке можно переставлять местами, часть карт разыгрываются и соответственно из руки пропадают, если в руке игрока меньше 6 карт, то они добираются до 6. Для карт использовать объекты типа Card c двумя полями: стоимость и описание карты.
9. Официанты формируют список заказов на кухню, который постоянно пополняется. Заказы могут быть срочными и не срочными. Повара сначала должны выполнять срочные заказы, а затем любые – по желанию. На кухне работают три повара со специализациями: первые блюда, вторые блюда, десерт – т. е., первый повар основную часть работы уделяет первым блюдам, если они есть в списке и любым другим блюдам, если первых блюд в списке нет. Повар не приступает к выполнению нового блюда, даже если оно является его основным, пока не закончит старое. Программа должна рассортировать список заказов между ними так, чтобы загруженность поваров по времени была примерно одинакова. Использовать объекты типа Order с полями: (срочный; не срочный), (первые блюда, вторые блюда, десерт), (время выполнения заказа).
10. В стратегиях реального времени можно выделять группы из бойцов, единиц техники и т. д. Какую коллекцию можно использовать для создания такой группы, учитывая, что в группу можно добавлять и удалять элементы? Создать группу, в которую могут входить: герои, маги и простые бойцы. Сортировка внутри группы происходит следующим образом: сначала герои, затем маги и, наконец, простые бойцы. Внутри этих групп сортировка происходит по количеству здоровья члена группы. Использовать объект типа Unit c полями: герой (да, нет), маг (да, нет), количество здоровья. Протестировать работу программы, задав произвольно количество героев, магов и простых бойцов в группе. Программа должна выдавать список, упорядоченный указанным выше способом.
11. Какую коллекцию можно использовать для создания списка студентов группы университета? Создать группу, которая состоит из 20 студентов. Использовать объект типа Student c полями: ФИО, домашний адрес, телефон, оценки за последнюю сессию. Программа должна позволять выводить данные по отдельному студенту, по студентам, сдавшим экзамен на определенную оценку, вычислять среднюю успеваемость по определенному предмету или по всем предметам.