Решение работает в Идее но при проверке валидатора говорит что программа работала слишком долго и не проходит проверку.
Метод toString() и вывод содержимого листа (для отладки программы) на момент проверки были закоментированы. не знаю почему в задании они попали без комента.
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;
import java.util.Scanner;
/*
Отслеживаем изменения
*/
//d:\Test\file1.txt
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) {
String path1 = "";
String path2 = "";
ArrayList<String> fileArray1 = new ArrayList<>();
ArrayList<String> fileArray2 = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
path1 = reader.readLine();
path2 = reader.readLine();
} catch (Exception e) { e.printStackTrace(); }
try (FileReader fileReader1 = new FileReader(path1);
FileReader fileReader2 = new FileReader(path2);
Scanner fileScanner1 = new Scanner(fileReader1);
Scanner fileScanner2 = new Scanner(fileReader2)) {
while (fileScanner1.hasNextLine() || fileScanner2.hasNextLine()) {
fileArray1.add(fileScanner1.nextLine());
fileArray2.add(fileScanner2.nextLine());
}
} catch (Exception e) { e.printStackTrace(); }
int countLines1 = 0;
int countLines2 = 0;
while (countLines1 < fileArray1.size() && countLines2 < fileArray2.size()){
if (fileArray1.get(countLines1).equals(fileArray2.get(countLines2))) {
lines.add(new LineItem(Type.SAME, fileArray1.get(countLines1)));
countLines1++;
countLines2++;
} else if ((countLines2 < fileArray2.size()) && (fileArray1.get(countLines1).equals(fileArray2.get(countLines2 + 1)))) {
lines.add(new LineItem(Type.ADDED, fileArray2.get(countLines2)));
countLines2++;
} else if (countLines1 + 1 < fileArray1.size() && fileArray1.get(countLines1 +1).equals(fileArray2.get(countLines2))){
lines.add(new LineItem(Type.REMOVED, fileArray1.get(countLines1)));
countLines1++;
}
}
for (LineItem lineItem : lines) {
System.out.println(lineItem.toString());
}
}
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;
}
public String toString() {
String result = "";
if (this.type.equals(Type.SAME)) {
return "SAME" + this.line;
} else if (this.type.equals(Type.ADDED)) {
return "ADDED" + this.line;
} else if (this.type.equals(Type.REMOVED)){
return "REMOVED" + this.line;
}
return result;
}
}
}
