В компьютерной игре герой (класс Hero) может перемещаться между двумя точками (метод move) различными способами: идти пешком, ехать на лошади, лететь и т. п. Реализовать классы, позволяющие выбирать и менять в ходе выполнения программы способ перемещения героя, используя паттерн “стратегия” (strategy). Продемонстрировать работу реализованных классов.
- Считывает из текстового файл размерность матрицы N*N.
- Создаёт и заполняет матрицу случайными числами от -N до N.
- Последовательно поворачивает матрицу на 90, 180 и 270 градусов против часовой стрелки и делит каждый элемент на сумму соседних.
- Каждую из трёх получившихся матриц вывести в общий файл.
- Контролировать состояние потоков ввода/вывода (отсутствие записи в файле, недопустимые значения, etc).
- Генерировать и обрабатывать исключение при некорректных математических операциях.
- Выбрасывать исключение при нехватке памяти.
- Реализовать собственные классы исключений для случаев:
- деление на 0;
- файл не существует;
- N > 1_000_000.
выбираем один тип (простейшие/губки/хордовые и т.д.), а далее наследуйте классы, отряды, семейства, роды и виды) - должна получиться иерархия в 6 уровней, выбор животных на ваш вкус, особо много создавать не нужно.
- Создаем обобщенный класс Queue, представляющий из себя очередь фиксированного размера со стандартными методами очереди - add и get.
- Создаем методы produce и consume:
- Produce должен возвращать upper bound generic очередь (например, наследники позвоночных) из n животных, которая будет генерироваться на ваше усмотрение и подаваться во второй метод.
- Consume будет их распределять в 2 или более lower bound очереди - например, родители кошек и родители змей, выбор типов также остаётся за вами.
- Демонстрируем работу всех методов на конкретных собственных кейсах.
- Создать класс, содержащий только приватные методы (3–4 шт.).
- Аннотировать любые из них.
- Вызвать из другого класса все аннотированные методы столько раз, сколько указано в параметре аннотации.
- Метод, возвращающий среднее значение списка целых чисел.
- Метод, приводящий все строки в списке в верхний регистр и добавляющий к ним префикс «new».
- Метод, возвращающий список квадратов всех встречающихся только один раз элементов списка.
- Метод, принимающий на вход коллекцию строк и возвращающий все строки, начинающиеся с заданной буквы, отсортированные по алфавиту.
- Метод, принимающий на вход коллекцию и возвращающий её последний элемент или кидающий исключение, если коллекция пуста.
- Метод, принимающий на вход массив целых чисел, возвращающий сумму чётных чисел или 0, если чётных чисел нет.
- Метод, преобразовывающий все строки в списке в Map, где первый символ – ключ, оставшиеся – значение.
- Создать супервизор (управляющую программу), которая контролирует исполнение абстрактной программы.
- Абстрактная программа работает в отдельном потоке и является классом с полем перечисляемого типа, который отражает ее состояние (UNKNOWN, STOPPING, RUNNING, FATAL ERROR) и имеет потокдемон случайного состояния, который в заданном интервале меняет её состояние на случайное.
- У супервизора должны быть методы остановки и запуска абстрактной программы, которые меняют ее состояние.
- Супервизор является потоком, который циклически опрашивает абстрактную программу, и если ее состояние UNKNOWN или STOPPING, то перезапускает ее.
- Если состояние FATAL ERROR, то работа абстрактной программы завершается супервизором.
- Все изменения состояний должны сопровождаться соответствующими сообщениями в консоли.
- Использовать конструкции с wait/notify.
- Создать очередь сообщений, в которую пишут N потоков (количество потоков задается через args), и читают N потоков, использовать только пакет java.util.concurrent.
- Имена потоков должны быть осмыслены.
- Использовать конструкции с wait/notify запрещено.
- Класс Paragraph может содержать произвольное число других элементов разметки и текстовых элементов.
- Класс Text – текстовый элемент.
- Классы разметки Emphasis, Strong, Strikeout – выделение, сильное выделение и зачеркивание.
Элементы разметки могут содержать произвольное число других элементов разметки и текстовых элементов.
Все классы должны реализовывать метод toMarkdown(StringBuilder), который должен генерировать Markdown-разметку по следующим правилам:
- текстовые элементы выводятся как есть;
- выделенный текст окружается символами '*';
- сильно выделенный текст окружается символами '__';
- зачеркнутый текст окружается символами '~'.
Paragraph paragraph = new Paragraph(List.of(
new Strong(List.of(
new Text("1"),
new Strikeout(List.of(
new Text("2"),
new Emphasis(List.of(
new Text("3"),
new Text("4")
)),
new Text("5")
)),
new Text("6")
))
));
Вызов paragraph.toMarkdown(new StringBuilder()) должен заполнять переданный StringBuilder следующим содержимым:
__1~2*34*5~6__