Товарищи помогите решить. Два дня до 3 ночи бьюсь. Отрабатывает правильно при любых раскладах, но валидацию не проходит (((
package com.javarush.task.task19.task1916;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/*
Отслеживаем изменения
Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают.
Нужно создать объединенную версию строк, записать их в список lines.
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME.
В оригинальном и редактируемом файлах пустых строк нет.
Пример:
оригинальный редактированный общий
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
строка5 ADDED строка5
строка4 строка4 SAME строка4
строка5 REMOVED строка5
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileNameOne = reader.readLine(); // /home/robivan/Документы/file.txt
String fileNameTwo = reader.readLine();
reader.close();
FileReader reader1 = new FileReader(fileNameOne);
FileReader reader2 = new FileReader(fileNameTwo);
BufferedReader bf1 = new BufferedReader(reader1);
BufferedReader bf2 = new BufferedReader(reader2);
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
while (bf1.ready()) list1.add(bf1.readLine());
while (bf2.ready()) list2.add(bf2.readLine());
reader1.close();
reader2.close();
boolean size = list1.size() > list2.size();
int max = size ? list1.size() : list2.size();
for (int i = 0; i < max; i++ ) {
try {
if (list1.get(i).equals(list2.get(0))) {
lines.add(new LineItem(Type.SAME, list1.get(i)));
list2.remove(0);
} else if (list1.get(i).equals(list2.get(1))) {
lines.add(new LineItem(Type.ADDED, list2.get(0)));
list2.remove(0);
i--;
} else {
lines.add(new LineItem(Type.REMOVED, list1.get(i)));
}
} catch (IndexOutOfBoundsException e) {
if (size) lines.add(new LineItem(Type.REMOVED, list1.get(i)));
else lines.add(new LineItem(Type.ADDED, list2.get(0)));
break;
}
}
/*for (LineItem lineItem : lines) {
System.out.println(lineItem.type + " " + lineItem.line);
}*/
}
public static enum Type {
ADDED, //добавлена новая строка
REMOVED, //удалена строка
SAME //без изменений
}
public static class LineItem {
public Type type;
public String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}