Первый раз обращаюсь тут за помощью.... стыдно...
Извиняюсь за корявый почерк..
Не пойму почему валидатор по последнему пункту не пропускает, работают оба примера из условий + оба примера если файлы поменять местами + оба примера если удалить последнюю строчку (так чтобы остался последним SOME) + и если поменять эти файлы местами.
Проще говоря я не знаю сценария где моя программа не работает, думаю что валидатору не нравятся мои методы, как быть?
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 IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String numberS1 = reader.readLine();
String numberS2 = reader.readLine();
reader.close();
ArrayList<String> stringArrayList1 = new ArrayList<>();
BufferedReader bufferedReader1 = new BufferedReader(new FileReader(numberS1));
while (bufferedReader1.ready()){
stringArrayList1.add(bufferedReader1.readLine());
}
bufferedReader1.close();
ArrayList<String> stringArrayList2 = new ArrayList<>();
BufferedReader bufferedReader2 = new BufferedReader(new FileReader(numberS2));
while (bufferedReader2.ready()){
stringArrayList2.add(bufferedReader2.readLine());
}
bufferedReader2.close();
int a = 0;
if(stringArrayList1.size()>stringArrayList2.size()) {
a = stringArrayList1.size();
}else {
a = stringArrayList2.size();
}
for (int i = 0, b = 0; i < a; ) {
if(i<stringArrayList1.size() && b<stringArrayList2.size() && (b+1 >= stringArrayList2.size()
&& i+1 >= stringArrayList1.size()) && (stringArrayList1.get(i).equals(stringArrayList2.get(b)))){
LineItem lineItem = new LineItem(Type.SAME, stringArrayList1.get(i));
lines.add(lineItem);
break;
}
if(b >= stringArrayList2.size() ){
LineItem lineItem = new LineItem(Type.REMOVED, stringArrayList1.get(i));
lines.add(lineItem);
break;
}else if(i >= stringArrayList1.size() ){
LineItem lineItem = new LineItem(Type.ADDED, stringArrayList2.get(b));
lines.add(lineItem);
break;
}
String lineFile1 = stringArrayList1.get(i);
String lineFile2 = stringArrayList2.get(b);
if (lineFile1.equals(lineFile2)) {
LineItem lineItem = new LineItem(Type.SAME, lineFile1);
lines.add(lineItem);
b++;
i++;
continue;
}
if(i+1<stringArrayList1.size() && stringArrayList1.get(i+1).equals(stringArrayList2.get(b))){
LineItem lineItem = new LineItem(Type.REMOVED, lineFile1);
lines.add(lineItem);
i++;
continue;
}
if(b+1<stringArrayList2.size() && stringArrayList1.get(i).equals(stringArrayList2.get(b+1))){
LineItem lineItem = new LineItem(Type.ADDED, lineFile2);
lines.add(lineItem);
b++;
continue;
}
}
lines.forEach(System.out::println);
}
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.name()+" - "+line;
}
}
}