/**
Считать с консоли 2 имени файла - file1, file2.
Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают.
Нужно создать объединенную версию строк, записать их в список lines.
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME.
Пустые строки даны в примере для наглядности.
В оригинальном и редактируемом файлах пустых строк нет!
Пример 1:
оригинальный редактированный общий
file1: file2: результат:(lines)
строка1 строка1 SAME строка1
строка2 REMOVED строка2
строка3 строка3 SAME строка3
строка4 REMOVED строка4
строка5 строка5 SAME строка5
строка0 ADDED строка0
строка1 строка1 SAME строка1
строка2 REMOVED строка2
строка3 строка3 SAME строка3
строка4 ADDED строка4
строка5 строка5 SAME строка5
строка0 REMOVED строка0
Пример 2:
оригинальный редактированный общий
file1: file2: результат:(lines)
строка1 строка1 SAME строка1
строка0 ADDED строка0
Пустые строки в примере означают, что этой строки нет в определенном файле.
Требования:
1. Класс Solution должен содержать класс LineItem.
2. Класс Solution должен содержать enum Type.
3. Класс Solution должен содержать публичное статическое поле lines типа List<LineItem>,
которое сразу проинициализировано.
4. В методе main(String[] args) программа должна считывать имена файлов с консоли (используй BufferedReader).
5. В методе main(String[] args) BufferedReader для считывания данных с консоли должен быть закрыт.
6. Программа должна считывать содержимое первого и второго файла (используй FileReader).
7. Потоки чтения из файлов (FileReader) должны быть закрыты.
8. Список lines должен содержать объединенную версию строк из файлов, где для каждой строки указана
одна из операций ADDED, REMOVED, SAME.
*/
Перечитал несколько раз - ничего не понял. Как я воспринимаю условия:
Есть 2 файла: 1 и 2.
2й местами содержит идентичные 1му строки.
Нужно добавить ВСЕ строки в лист:
- если строки совпадают, то в листе это будет выглядеть так: SAMEпробелСтрока;
- если строки не совпадают, то: что? ADDEDпробелСтрока? REMOVEDпробелСтрока? Ведь отличающуюся строку можно считать, как вновь добавленной, так и удалённой.
- дальше вообще всё в тумане...
Нужно объяснение человеческим языком. Спасибо.Илья
30 уровень
не понимаю условия задачи
Обсуждается
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
31 октября 2020, 18:16
Нужно определить, что изменилось во 2-м файле по сравнению с первым.
Ты сравниваешь две строки. Если они одинаковые - значит SAME. Если нет - значит во втором файле строка была либо добавлена, либо удалена (подумай, как определить, добавлена или удалена).
"Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME." - это как раз чтобы легче было понять, удалена строка или добавлена. То есть не могут быть добавлены несколько строк подряд (или удалены).
0
Илья
31 октября 2020, 19:31
То есть сравнивать нужно каждую с каждой: ст1 со ст1, ст2, ст3,... потом ст2 со ст2, ст3, ст4,..?
0
Ksenia Volkova Java Developer в DXC Master
31 октября 2020, 19:37
Нет, не так.
Если строки не совпали - достаточно посмотреть следующую строку одного из файлов, чтобы определить, была ли несовпавшая строка файла2 вставкой или же там было удаление.
0
Илья
1 ноября 2020, 10:03
1. A - 1. A = SAME A - ок, вопросов нет.
Далее предположим вариант 1:
2. B - 2. C = ?
3. D - 3. B = ?
Предполагаю, что 2. = ADDED C, так как видно, что B смещена на 3ю строку.
Дальше не понятно: 3 = SAME B, так как с2ф1 совпадает с с3ф2 ? Или что здесь должно быть?
И соответственно далее с3ф1 нужно сравнивать с с4ф2 ? Если они равны, то 4 = SAME D ? А если не равны, то?
Или предположим вариант 2:
2. B - 2. C = ?
3. D - 3. D = ?
Предполагаю, что 2. = REMOVED B, так как видно, что с2ф1 не равна с3ф2. Так?
Вариант 3:
2. B - 2. C = ?
3. D - 3. E = ?
Предполагаю, что такой вариант исключен. Так?
Вариант 4:
2. B - 2. D = ?
3. D - 3. B = ?
Предполагаю, что 2. = SAME B, 3 = SAME D. Так?
Вариант 5:
2. B - 2. C = ? // 2. = SAME C ? ADDED C ? REMOVED B ? вариант исключен?
3. C - 3. D = ? // 3. = SAME C ? SAME D ? ADDED D ? REMOVED C ? вариант исключен?
4. D - 4. E = ? // 4. = SAME D ? SAME E ? ADDED E ? REMOVED D ? вариант исключен?
5. E - 5. F = ? // ....
6. F - 6. G = ? // ....
... // ....
0
Николай
3 ноября 2020, 16:12
Если сравниваемые строки (пусть это будет строка A для оригинально списка и B для редактированного) не равны в таком случае тебе нужно узнать, какая операция произошла для получения такого результата, добавление или удаление. Для этого ты должен взять в каком-либо списке следующую строку.
Предположим ты взял следующую строку C из оригинального списка. Эту строку ты сравниваешь с уже полученной тобой строкой B из редактированного списка. Если строки C и В окажутся равны, то тебе заведомо будет известно, что для получения такого результата должна была произойти операция удаления строки A из оригинального списка. Если же они окажутся не равны, то в таком случае, тебе заведомо известно, что произошла операция добавления строки B в редактированный список.
+2
Илья
3 ноября 2020, 18:02
Еще больше запутался) Но спасибо за попытку!
Сделал так, но валидатор упирается, говоря, что с REMOVED не всё гладко, хотя результат вроде бы такой, какой должен быть:
0
Илья
31 октября 2020, 17:56
"Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME." - вот это вообще трэш! Можно смело вручать Нобелевскую премию людям, понявшим это с первого раза.
0
Vit
17 ноября 2020, 17:32
я и с 30го раза не вкуриваю тут часто
0