Валидатор пишет: Убедись, что список lines в нужных местах содержит операции SAME с нужными строками
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));
ArrayList<String> fileList1 = new ArrayList<>();
ArrayList<String> fileList2 = new ArrayList<>();
String fileName1 = reader.readLine();
String fileName2 = reader.readLine();
try(BufferedReader file1 = new BufferedReader(new FileReader(fileName1)); BufferedReader file2 = new BufferedReader(new FileReader(fileName2))){
while(file1.ready()){
fileList1.add(file1.readLine());
}
while(file2.ready()){
fileList2.add(file2.readLine());
}
}
int maxSize = 0;
if(fileList1.size() > fileList2.size()) maxSize = fileList1.size() + (fileList1.size() - fileList2.size());
else maxSize = fileList2.size() + (fileList2.size() - fileList1.size());
int k = 0;
int j = 0;
for(int i = 0; i < maxSize; i++){
if(j > fileList2.size()-1){
lines.add(new LineItem(Type.REMOVED, fileList1.get(k)));
k++;
}
else if(k > fileList1.size()-1) break;
else if(fileList1.get(k).equals(fileList2.get(j))){
lines.add(new LineItem(Type.SAME,fileList1.get(k)));
k++; j++;
}
else{
if(fileList2.get(j).equals(fileList1.get(k+1))){
lines.add(new LineItem(Type.REMOVED, fileList1.get(k)));
k++;
}
if(fileList1.get(k).equals(fileList2.get(j+1))){
lines.add(new LineItem(Type.ADDED, fileList2.get(j)));
j++;
}
}
}
reader.close();
for (LineItem item : lines){
System.out.println(item.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;
}
@Override
public String toString() {
return type + " " + line;
}
}
}