Убедись, что список lines в нужных местах содержит операции REMOVED c нужными строками. Помогите, уже крыша едет!
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.*;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<>();
private static ArrayList<String> list1 = new ArrayList<>();
private static ArrayList<String> list2 = new ArrayList<>();
public static void main(String[] args) throws IOException {
list1.clear();
list2.clear();
lines.clear();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileReader1 = new BufferedReader(new FileReader(reader.readLine()));
BufferedReader fileReader2 = new BufferedReader(new FileReader(reader.readLine()));
reader.close();
while (fileReader1.ready()) {
list1.add(fileReader1.readLine());
}
while (fileReader2.ready()) {
list2.add(fileReader2.readLine());
}
fileReader1.close();
fileReader2.close();
/*
Надеюсь цвет ячеек даст вам намек на то что в цикле каждую строку файла1 сравниваем со строкой №1 файла2, если равны то SAME,
если нет то сравниваем со строкой №2 файла2 если равны то строка №1 файла2 ADDED,
если не равны то текущая строка файла1 REMOVED.
В случаях SAME и ADDED нулевую строку файла2 удаляем. Ну и сложные условия проверок равенства вы сами додумаете чем дополнить если файл2 уже пуст.
*/
for (int i = 0; i < list1.size(); i++) {
if (list2.size() > 0 &&list1.get(i).trim().equals(list2.get(0).trim())) {
lines.add(new LineItem(Type.SAME, list2.get(0)));
list2.remove(0);
}
else {
if (list2.size() > 0 && list1.get(i).trim().equals(list2.get(1).trim())) {
lines.add(new LineItem(Type.ADDED, list2.get(0)));
list2.remove(0);
i--;
}
else {
lines.add(new LineItem(Type.REMOVED, list1.get(i)));
}
}
}
for (LineItem k : lines) {System.out.println(k);}
}
/*
d:\files\begin.txt
d:\files\end.txt
*/
public enum Type {ADDED, REMOVED, SAME}
public static class LineItem {
private Type type;
private String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
public String toString() {return type + " " + line;}
}
}