Подскажите, пожалуйста, что не нравится валидатору? На любых моих тестовых данных всё работает, включая примеры с 1, 2, 3 строчками, а так же одинаковыми строками рядом, несколько Same подряд и т.д.
Валидатор жалуется на Same.
package com.javarush.task.task19.task1916;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.temporal.TemporalUnit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static ArrayList<String> lines1 = new ArrayList<String>();
public static ArrayList<String> lines2 = new ArrayList<String>();
public static ArrayList<TempLines> samelist=new ArrayList<>();
public static void main(String[] args) {
String f1 = "";
String f2 = "";
try (BufferedReader sc = new BufferedReader(new InputStreamReader(System.in))) {
f1 = sc.readLine();
f2 = sc.readLine();
} catch (Exception e) {
}
try (BufferedReader reader1 = new BufferedReader(new FileReader(f1));
BufferedReader reader2 = new BufferedReader(new FileReader(f2))) {
while (reader1.ready() ) {
String firstStr = reader1.readLine();
lines1.add(firstStr);
}
while (reader2.ready() ) {
String secondStr = reader2.readLine();
lines2.add(secondStr);
}
} catch (Exception e) {
}
for (int i=0; i<lines1.size();i++) {
for (int j=0;j<lines2.size();j++) {
if(lines1.get(i).equals(lines2.get(j))) {
if (samelist.size() == 0 || (samelist.get(samelist.size()-1).number2-j<0 && samelist.get(samelist.size()-1).number2-j>=-2)) {
TempLines tl=new TempLines(i,j);
samelist.add(tl);
}
}
}
}
if(samelist.get(0).number1>0)
{
LineItem li=new LineItem(Type.REMOVED,lines1.get(0));
lines.add(li);
}
if(samelist.get(0).number2>0)
{
LineItem li=new LineItem(Type.ADDED,lines2.get(0));
lines.add(li);
}
int samePos=0;
while (samePos<samelist.size())
{
LineItem li=new LineItem(Type.SAME,lines1.get(samelist.get(samePos).number1));
lines.add(li);
samePos++;
if(samePos<samelist.size() && samelist.get(samePos).number1>samelist.get(samePos-1).number1+1)
{
li=new LineItem(Type.REMOVED,lines1.get(samelist.get(samePos-1).number1+1));
lines.add(li);
}
else if(samePos<samelist.size() && samelist.get(samePos).number2>samelist.get(samePos-1).number2+1)
{
li=new LineItem(Type.ADDED,lines2.get(samelist.get(samePos-1).number2+1));
lines.add(li);
}
}
if(samelist.get(samelist.size()-1).number1<lines1.size()-1)
{
LineItem li=new LineItem(Type.REMOVED,lines1.get(lines1.size()-1));
lines.add(li);
}
if(samelist.get(samelist.size()-1).number2<lines2.size()-1)
{
LineItem li=new LineItem(Type.ADDED,lines2.get(lines2.size()-1));
lines.add(li);
}
}
public static enum Type {
ADDED, //добавлена новая строка
REMOVED, //удалена строка
SAME //без изменений
}
public static class TempLines
{
public int number1;
public int number2;
public TempLines(int number1, int number2)
{
this.number1=number1;
this.number2=number2;
}
}
public static class LineItem {
public Type type;
public String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}