Conversation
demologin
left a comment
There was a problem hiding this comment.
в данном проекте корректно реализованы три из четырёх методов, написано консольное приложение, есть несколько важных и не очень важных замечаний. В целом весь материал первого модуля так или иначе был использован, я поставил оценку б, однако поскольку форма была не заполнена, то это оценка не отобразится в итоговой таблицы. Напомните мне после заполнения формы чтобы я поставил оценку туда
| int key = Validator.scanKey(); // Считываем ключ от пользователя | ||
|
|
||
| // Читаем текст из файла | ||
| ArrayList<String> text = new ArrayList<>(Files.readAllLines(Path.of("text\\text.txt"))); |
There was a problem hiding this comment.
Такой путь будет работать только в Windows.
Тут лучше Path.of("text","text.txt")
|
|
||
| // Метод для расшифровки текста методом полного перебора (Brute Force) | ||
| private static void bruteForceFile() throws IOException { | ||
| ArrayList<String> text = new ArrayList<>(Files.readAllLines(Path.of("text\\encrypted.txt"))); |
There was a problem hiding this comment.
тут для всех файлов жёстко заданный пути и имена, в реальных программах так никогда не делают, пользователь должен иметь возможность указать те пути которые нужны ему
| // Метод для расшифровки текста статистическим анализом | ||
| private static void statisticalFile() throws IOException { | ||
| ArrayList<String> text = new ArrayList<>(Files.readAllLines(Path.of("text\\encrypted.txt"))); | ||
|
|
There was a problem hiding this comment.
не очень понятно зачем нужны эти пустые строки
|
|
||
| // Алфавит, используемый для шифрования и дешифрования | ||
| // Содержит русские буквы в нижнем и верхнем регистре, знаки препинания и пробел | ||
| public static final char[] ALPHABET = {'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', |
There was a problem hiding this comment.
по смыслу это константа, но технически это массив, а массивы можно изменять,можно конечно оставить и так, но если делать все совсем строго, то лучше дать этому полю обычное имя
|
|
||
| // Выполняет статистический анализ текста для взлома шифра Цезаря | ||
| // Объединяет весь текст в одну строку, находит самый частый символ и расшифровывает текст | ||
| public ArrayList<String> statisticalAnalysis(ArrayList<String> text) { |
There was a problem hiding this comment.
метод полностью дублирует название класса
| int maxCount = 0; | ||
|
|
||
| // Определяем символ с максимальной частотой | ||
| for (Map.Entry<Character, Integer> entry : count.entrySet()) { |
There was a problem hiding this comment.
Тут основная логическая ошибка. Под статическим анализом подразумевается возможность что напротив каждой буквы стоит какая-то другая и они не имеют никакой упорядоченности друг относительно друга. Поэтому вычисления самого часто символа позволяет определить корректно только его, а весь остальной текст не расшифруется
|
|
||
| // Вычисляет ключ шифра Цезаря как разницу позиции самого частого символа и пробела | ||
| // Если ключ отрицательный, корректирует его, добавляя длину алфавита | ||
| public static int differenceWithSpace(char mostFrequent) { |
There was a problem hiding this comment.
Напишу здесь с другими словами. Статический анализ расшифровывает не именно шифр цезаря а потенциально любой шифр где одной букве соответствует какая-то другая. При этой реализации по сути получился вариант грубого перебора который уже и так реализован
| private static final String asterisk = "*".repeat(60); | ||
|
|
||
| // Метод отображает главное меню программы и возвращает выбор пользователя | ||
| public static int begin() { |
There was a problem hiding this comment.
Java почти все методы начинаются с глагола
| // Мини-словарь частых слов для проверки корректности расшифровки | ||
| private static final String[] DICTIONARY = {"и", "в", "на", "что", "как", "это", "он", "она", "они"}; | ||
|
|
||
| // Метод перебирает все возможные ключи шифра Цезаря и выбирает лучший |
There was a problem hiding this comment.
Комментарии это хорошо, но во-первых лучше бы они были на английском языке, а во-вторых в Java активно используется Javadoc
|
|
||
| // Главный цикл программы, пока пользователь не выберет выход | ||
| while (true) { | ||
| int num = Validator.begin(); // Получаем выбор пользователя |
There was a problem hiding this comment.
По логике мы получаем выбор пользователя а по коду начинаем валидацию. Неправильно назван метод и класс
No description provided.