помогите где ошибка в моём алгоритме?
package com.javarush.task.task19.task1916;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) throws IOException {
BufferedReader fileNameReader = new BufferedReader(new InputStreamReader(System.in));
String file1 = fileNameReader.readLine();
String file2 = fileNameReader.readLine();
fileNameReader.close();
FileReader firstFileFileReader = new FileReader(file1);
FileReader secondFileFileReader = new FileReader(file2);
OutputStream firstFileOutputStream1 = new ByteArrayOutputStream();
OutputStream firstFileOutputStream2 = new ByteArrayOutputStream();
while (firstFileFileReader.ready()) {
int data = firstFileFileReader.read();
firstFileOutputStream1.write(data);
}
while (secondFileFileReader.ready()) {
int data = secondFileFileReader.read();
firstFileOutputStream2.write(data);
}
String[] firstFileOutputStreamStrings = firstFileOutputStream1.toString().replaceAll("[\\n]", " ").replaceAll("\\r", "").split(" ");
String[] secondFileOutputStreamStrings = firstFileOutputStream2.toString().replaceAll("[\\n]", " ").replaceAll("\\r", "").split(" ");
int j = 0;
for (int i = 0; i < Math.max(firstFileOutputStreamStrings.length,secondFileOutputStreamStrings.length); i++) {
try {
if (firstFileOutputStreamStrings[i].equals(secondFileOutputStreamStrings[j])) {
lines.add(new LineItem(Type.SAME, firstFileOutputStreamStrings[i]));
j++;
} else if (!firstFileOutputStreamStrings[i].equals(secondFileOutputStreamStrings[j])) {
if (firstFileOutputStreamStrings[i + 1].equals(secondFileOutputStreamStrings[j])) {
lines.add(new LineItem(Type.REMOVED, firstFileOutputStreamStrings[i]));
} else {
lines.add(new LineItem(Type.ADDED, secondFileOutputStreamStrings[j]));
i = i - 1;
j++;
}
}
} catch (Exception e) {
if (firstFileOutputStreamStrings.length>secondFileOutputStreamStrings.length) {
lines.add(new LineItem(Type.REMOVED, firstFileOutputStreamStrings[i]));
} else {
lines.add(new LineItem(Type.ADDED, secondFileOutputStreamStrings[j]));
j++;
}
}
}
firstFileFileReader.close();
secondFileFileReader.close();
firstFileOutputStream1.close();
firstFileOutputStream2.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;
}
}
}