Домашнее задание 1. Hello World
Тесты к домашним заданиям
-
Установите
JDK 17+.
-
Скопируйте один из вариантов
HelloWorld
,
рассмотренных на практике.
-
Откомпилируйте
HelloWorld.java
и получите
HelloWorld.class
.
-
Запустите
HelloWorld
и проверьте его работоспособность.
-
Создайте скрипт, компилирующий и запускающий
HelloWorld
из командной строки.
Домашнее задание 2. Сумма чисел
-
Разработайте класс
Sum
, который при запуске из командной
строки будет складывать переданные в качестве аргументов целые
числа и выводить их сумму на консоль.
-
Примеры запуска программы:
java Sum 1 2 3
- Результат: 6
java Sum 1 2 -3
- Результат: 0
java Sum "1 2 3"
- Результат: 6
java Sum "1 2" " 3"
- Результат: 6
java Sum " "
- Результат: 0
Аргументы могут содержать:
-
При выполнении задания можно считать, что для представления входных данных
и промежуточных результатов достаточен тип
int
.
-
Перед выполнением задания ознакомьтесь с документацией к классам
String
и
Integer.
-
Для отладочного вывода используйте
System.err,
тогда он будет игнорироваться проверяющей программой.
Домашнее задание 3. Реверс
-
Разработайте класс
Reverse
,
читающий числа из
стандартного ввода,
и выводящий их на
стандартный вывод
в обратном порядке.
-
В каждой строке входа содержится некоторое количество целых чисел
(возможно ноль).
Числа разделены пробелами.
Каждое число помещается в тип
int
.
-
Порядок строк в выходе должен быть обратным по сравнению
с порядком строк во входе.
Порядок чисел в каждой строке также должен быть обратным к порядку
чисел во входе.
-
Вход содержит не более 10⁶ чисел и строк.
-
Для чтения чисел используйте класс
Scanner.
-
Примеры работы программы:
Ввод | Вывод |
---|
1 2
3
|
3
2 1
|
3
2 1
|
1 2
3
|
1
2 -3
|
-3 2
1
|
1 2
3 4
|
4 3
2 1
|
Домашнее задание 4. Статистика слов
-
Разработайте класс
WordStatInput
,
подсчитывающий статистику встречаемости слов
во входном файле.
-
Словом называется непрерывная последовательность букв,
апострофов (
'
) и дефисов (Unicode category
Punctuation, Dash).
Для подсчета статистики слова приводятся к нижнему регистру.
-
Выходной файл должен содержать все различные слова,
встречающиеся во входном файле, в порядке их появления.
Для каждого слова должна быть выведена одна строка,
содержащая слово и число его вхождений во входном файле.
-
Имена входного и выходного файла задаются в качестве аргументов
командной строки. Кодировка файлов: UTF-8.
-
Чтение должно быть реализовано в блочном режиме с использованием
Reader.
-
Примеры работы программы:
Входной файл | Выходной файл |
---|
To be, or not to be, that is the question:
|
to 2
be 2
or 1
not 1
that 1
is 1
the 1
question 1
|
Monday's child is fair of face.
Tuesday's child is full of grace.
|
monday's 1
child 2
is 2
fair 1
of 2
face 1
tuesday's 1
full 1
grace 1
|
Шалтай-Болтай
Сидел на стене.
Шалтай-Болтай
Свалился во сне.
|
шалтай-болтай 2
сидел 1
на 1
стене 1
свалился 1
во 1
сне 1
|
Домашнее задание 5. Свой сканер
-
Реализуйте свой аналог класса
Scanner
на основе
Reader.
-
Примените разработанный
Scanner
для
решения задания «Реверс».
-
Примените разработанный
Scanner
для
решения задания «Статистика слов».
-
Нужно использовать блочное чтение.
Код, управляющий чтением, должен быть общим.
- Сложный вариант.
Код, выделяющий числа и слова, должен быть общим.
-
Обратите внимание на:
- Обработку ошибок.
- Модификаторы доступа.
-
Слова и числа, пересекающие границы блоков,
особенно — больше одного раза.
Домашнее задание 6. Статистика слов++
-
Разработайте класс
Wspp
,
который будет подсчитывать статистику встречаемости слов
во входном файле.
-
Словом называется непрерывная последовательность букв,
апострофов (
'
) и дефисов (Unicode category
Punctuation, Dash).
Для подсчета статистики слова приводятся к нижнему регистру.
-
Выходной файл должен содержать все различные слова,
встречающиеся во входном файле, в порядке их появления.
Для каждого слова должна быть выведена одна строка,
содержащая слово, число его вхождений во входной файл и
номера вхождений этого слова среди всех слов во входном файле.
-
Имена входного и выходного файла задаются в качестве аргументов
командной строки. Кодировка файлов: UTF-8.
-
Программа должна работать за линейное от размера входного файла
время.
-
Для реализации программы используйте Collections Framework.
- Сложный вариант.
Реализуйте и примените класс
IntList
,
компактно хранящий список целых чисел.
-
Примеры работы программы:
Входной файл | Выходной файл |
---|
To be, or not to be, that is the question:
|
to 2 1 5
be 2 2 6
or 1 3
not 1 4
that 1 7
is 1 8
the 1 9
question 1 10
|
Monday's child is fair of face.
Tuesday's child is full of grace.
|
monday's 1 1
child 2 2 8
is 2 3 9
fair 1 4
of 2 5 11
face 1 6
tuesday's 1 7
full 1 10
grace 1 12
|
Шалтай-Болтай
Сидел на стене.
Шалтай-Болтай
Свалился во сне.
|
шалтай-болтай 2 1 5
сидел 1 2
на 1 3
стене 1 4
свалился 1 6
во 1 7
сне 1 8
|
Домашнее задание 7. Разметка
-
Разработайте набор классов для текстовой разметки.
-
Класс
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__
-
Разработанные классы должны находиться в пакете
markup
.