Я 3 часа сидел делал эту задачу, очень много промучался. Я протестировал всё заранее на примерах из условия:
1) создал 2 файла
2) запихнул в них ТО ЖЕ содержание, как в УСЛОВИИ
3) моя программа выдаёт ТАКОЙ ЖЕ результат, как в УСЛОВИИ
ПОЧЕМУ ВАЛИДАТОР НЕ ПРИНИМАЕТ РЕШЕНИЕ, ЕСЛИ РЕШЕНИЕ 100% ВЕРНО И СООТВЕТСТВУЕТ РЕЗУЛЬТАТАМ ИЗ УСЛОВИЯ???
Вот в условии есть 2 разных примера. И ещё к каждому примеру есть результат, который должен получиться. Моя программа 100% идентичный результат выдаёт по каждому из примеров. ТАК ПОЧЕМУ ЖЕ ВАЛИДАТОР ЕГО ВЕЛИЧИЕ НЕ ПРОПУСКАЕТ?
Подсказка от ментора: "Убедись, что список lines в нужных местах содержит операции ADDED c нужными строками."
Я УБЕДИЛСЯ, В КАЖДОМ ИЗ ВАРИАНТОВ В УСЛОВИИ МОЯ ПРОГА ВЫВОДИТ ТОЧНО 100% НУЖНЫЙ РЕЗУЛЬТАТ СТРОЧКА В СТРОЧКУ!!!
Теперь блин куча времени впустую тратить из-за этого валидатора... Как всегда, приходится играть в игру "Угадай что хочет валидатор".
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 readerConsole = new BufferedReader(new InputStreamReader(System.in));
String file_1 = readerConsole.readLine();
String file_2 = readerConsole.readLine();
readerConsole.close();
BufferedReader readerFile_1 = new BufferedReader(new FileReader(file_1));
List<String> lines1 = new ArrayList<>();
while (readerFile_1.ready())
lines1.add(readerFile_1.readLine());
readerFile_1.close();
BufferedReader readerFile_2 = new BufferedReader(new FileReader(file_2));
List<String> lines2 = new ArrayList<>();
while (readerFile_2.ready())
lines2.add(readerFile_2.readLine());
readerFile_2.close();
int length = lines1.size() > lines2.size() ? lines1.size() + 1 : lines2.size() + 1;
int lines1Size = lines1.size();
int lines2Size = lines2.size();
for (int i = lines1.size(); i < length; i++)
lines1.add("");
for (int i = lines2.size(); i < length; i++)
lines2.add("");
int i = 0;
int j = 0;
int count = 0;
while (count < length - 1) {
String line1;
String line2;
line1 = lines1.get(i);
line2 = lines2.get(j);
if (line1.equals(line2)) {
lines.add(new LineItem(Type.SAME, line1));
i++;
j++;
count++;
} else if (line1.equals(lines2.get(j + 1))) {
lines.add(new LineItem(Type.ADDED, line2));
j++;
if (lines2Size > lines1Size) count++;
} else if (line2.equals(lines1.get(i + 1))) {
lines.add(new LineItem(Type.REMOVED, line1));
i++;
if (lines1Size > lines2Size) count++;
}
}
}
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;
}
}
}