Хоть убейте не пойму что не нравится "ментору".
Прогоняю строки из задания в прямом и обратном направлении.
В первом случае получаю вывод ровно такой как в условиях задачи.
Если меняю местами файлы, получаю зеркальный вариант, т.е. там где был REMOVED, становится ADDED и наоборот.
С примером из трех строк так же справляется программа.
Что я делаю не так. Прошу помогите! )))
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;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) {
String fileName1 = ""; //"D:\\T\\file.txt";
String fileName2 = ""; //"D:\\T\\file1.txt";
try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))){
fileName1 = reader.readLine();
fileName2 = reader.readLine();
}catch (IOException e){
e.getMessage();
}
try (BufferedReader bf1 = new BufferedReader(new FileReader(fileName1));
BufferedReader bf2 = new BufferedReader(new FileReader(fileName2))) {
ArrayList<String> listString1 = new ArrayList<>();
ArrayList<String> listString2 = new ArrayList<>();
while (bf1.ready()) {
listString1.add(bf1.readLine());
}
while (bf2.ready()) {
listString2.add(bf2.readLine());
}
int i = 0;
if (listString1.size() > listString2.size()) {
while (listString1.size() > 0) {
if (listString2.size() == 0) {
lines.add(new LineItem(Type.REMOVED, listString1.get(i)));
listString1.remove(i);
break;
}
if (listString1.get(i).equals(listString2.get(i))) {
lines.add(new LineItem(Type.SAME, listString1.get(i)));
listString1.remove(i);
listString2.remove(i);
continue;
}
if (listString1.get(i + 1).equals(listString2.get(i))) {
lines.add(new LineItem(Type.REMOVED, listString1.get(i)));
listString1.remove(i);
continue;
}
if (listString1.get(i).equals(listString2.get(i + 1))) {
lines.add(new LineItem(Type.ADDED, listString2.get(i)));
listString2.remove(i);
continue;
}
}
} else {
while (listString2.size() > 0) {
if (listString1.size() == 0) {
lines.add(new LineItem(Type.ADDED, listString2.get(i)));
listString2.remove(i);
break;
}
if (listString2.get(i).equals(listString1.get(i))) {
lines.add(new LineItem(Type.SAME, listString1.get(i)));
listString1.remove(i);
listString2.remove(i);
continue;
}
if (listString2.get(i + 1).equals(listString1.get(i))) {
lines.add(new LineItem(Type.ADDED, listString1.get(i)));
listString2.remove(i);
continue;
}
if (listString2.get(i).equals(listString1.get(i + 1))) {
lines.add(new LineItem(Type.REMOVED, listString2.get(i)));
listString1.remove(i);
continue;
}
}
}
/*for (int k = 0; k < lines.size(); k++) {
System.out.println(lines.get(k));
}*/
} catch (IOException e) {
e.getMessage();
}
}
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;
}
/*@Override
public String toString() {
return type + " " + line;
}*/
}
}