Не проходит валидацию, так все работает вроде корректно. Что может быть?!
package com.javarush.task.task19.task1916;
import java.io.*;
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 Exception{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file1 = reader.readLine();
String file2 = reader.readLine();
FileReader fileReader1 = new FileReader(file1);
FileReader fileReader2 = new FileReader(file2);
BufferedReader bufferedReader1 = new BufferedReader(fileReader1);
BufferedReader bufferedReader2 = new BufferedReader(fileReader2);
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
String line1;
// заполняем оба arraylist значениями
while ((line1=bufferedReader1.readLine()) != null){
list1.add(line1);
}
String line2;
while ((line2=bufferedReader2.readLine()) != null){
list2.add(line2);
}
fileReader1.close();
fileReader2.close();
bufferedReader1.close();
bufferedReader2.close();
int leftCount = 0;
int rightCount = 0;
// если список 1 больше списка 2 то сравниваем опусканием левого
if (list1.size() > list2.size()){
int counter = list2.size();
int count = 0;
while (count < counter){
if (list1.get(leftCount).equals(list2.get(rightCount))){
lines.add(new LineItem(Type.SAME, list1.get(leftCount)));
}else {
if (list1.get(leftCount + 1).equals(list2.get(rightCount))){
lines.add(new LineItem(Type.REMOVED, list1.get(leftCount)));
rightCount--;
counter++;
}else {
lines.add(new LineItem(Type.ADDED, list2.get(rightCount)));
leftCount--;
}
}
leftCount++;
rightCount++;
count++;
}
lines.add(new LineItem(Type.REMOVED, list1.get(leftCount)));
}
// если список 1 меньше списка 2, то сравниваем опусканием правого
if (list1.size() < list2.size()){
int counter = list1.size();
int count = 0;
while (count < counter){
if (list1.get(leftCount).equals(list2.get(rightCount))){
lines.add(new LineItem(Type.SAME, list2.get(rightCount)));
}else {
if (list2.get(rightCount + 1).equals(list1.get(leftCount))){
lines.add(new LineItem(Type.ADDED, list2.get(rightCount)));
leftCount--;
counter++;
}else {
lines.add(new LineItem(Type.REMOVED, list1.get(leftCount)));
rightCount--;
}
}
leftCount++;
rightCount++;
count++;
}
lines.add(new LineItem(Type.ADDED, list2.get(rightCount)));
}
fileReader1.close();
fileReader2.close();
bufferedReader1.close();
bufferedReader2.close();
reader.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;
}
}
}