Здравствуйте! Подскажите где накосячил. Перепроверил на чем только можно :(
package com.javarush.task.task19.task1916;
import com.sun.org.apache.bcel.internal.generic.BREAKPOINT;
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 {
boolean debug = false;
//1. Получаем имена файлов
String fileName1;
String fileName2;
if (!debug) {
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
fileName1 = bReader.readLine();
fileName2 = bReader.readLine();
bReader.close();
} else {
fileName1 = "C:\\JR\\Data\\file1.txt";
fileName2 = "C:\\JR\\Data\\file2.txt";
}
//2. Заносим строки в лист
FileReader fileReader1 = new FileReader(fileName1);
FileReader fileReader2 = new FileReader(fileName2);
BufferedReader fReder1 = new BufferedReader(fileReader1);
BufferedReader fReder2 = new BufferedReader(fileReader2);
List<String> f1 = new ArrayList<>();
List<String> f2 = new ArrayList<>();
String str = null;
while ((str = fReder1.readLine()) != null) {
f1.add(str);
}
while ((str = fReder2.readLine()) != null) {
f2.add(str);
}
fileReader1.close();
fileReader2.close();
//3. Смотрим макимальный список
int maxSize = Math.max(f1.size(), f2.size());
//4. Начинаем обход по самому длинному списку
int i1 = 0;
int i2 = 0;
for (int i = 0; i < maxSize; i++) {
//4.1 Проверка на длинну списка
if (f1.size() <= i1) {
lines.add(new LineItem(Type.ADDED, f2.get(i2)));
continue;
}
if (f2.size() <= i2) {
lines.add(new LineItem(Type.REMOVED, f1.get(i1)));
continue;
}
//4.2 Если по длине списка все норм то получаем строки
String line1 = f1.get(i1);
String line2 = f2.get(i2);
//4.3 Если совпадает
if (line1.equals(line2)) {
lines.add(new LineItem(Type.SAME, line1));
i1++;
i2++;
}
//4.4.1 Если не совпадает
if (!(line1.equals(line2))) {
//Если строка добавлена
if (f2.size() > (i2 + 1) && line1.equals(f2.get(i2 + 1))) {
lines.add(new LineItem(Type.ADDED, line2));
i2++;
i--;
}
//4.4.2 Иначе удалена
else {
lines.add(new LineItem(Type.REMOVED, line1));
i1++;
}
}
}
//5. Проверка
for (LineItem line : lines) {
System.out.println(line.type + " : " + line.line);
}
}
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;
}
}
}