Здравствуйте! Подскажите где накосячил? Каким тестовым примером можно отловить ошибку?
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) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String fileName1 = br.readLine();
String fileName2 = br.readLine();
if (false) {
fileName1 = "F:\\Java\\1.txt";
fileName2 = "F:\\Java\\2.txt";
}
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
FileReader fr1 = new FileReader(fileName1);
FileReader fr2 = new FileReader(fileName2);
BufferedReader br1 = new BufferedReader(fr1);
BufferedReader br2 = new BufferedReader(fr2);
String line="";
while ((line = br1.readLine()) != null) {
list1.add(line);
}
while ((line = br2.readLine()) != null) {
list2.add(line);
}
int j = 0;
for (int i = 0; i < list1.size(); i++) {
String strA = list1.get(i);
//Проверка на корректность индекса для j
if (j >= list2.size()) {
lines.add(new LineItem(Type.REMOVED, strA));
continue;
}
//Строки совпадают
if (strA.equals(list2.get(j))) {
lines.add(new LineItem(Type.SAME, strA));
//Обнуляем отработанные строки
list1.set(i,null);
list2.set(j,null);
j++;
} else {
//Если строки не совпадают то смотрим что это за строка...
//...добавлена в список 2
if (strA.equals(list2.get(j + 1))) {
lines.add(new LineItem(Type.ADDED, list2.get(j)));
//Обнуляем отработанные строки
list2.set(j,null);
i--;
j++;
} else {
lines.add(new LineItem(Type.REMOVED, strA));
//Обнуляем отработанные строки
list1.set(i,null);
}
}
}
//Возможен вариант когда второй список больше
for (int i = list1.size(); i < list2.size(); i++) {
if(list2.get(i) == null) continue;
lines.add(new LineItem(Type.ADDED, list2.get(i)));
}
fr1.close();
fr2.close();
br.close();
br1.close();
br2.close();
}
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;
}
}
}