My strategy was to create copy arraylists and then insert the word "empty" to the list where an item got added or removed. The examples worked perfectly but it didn't pass the validator.
package com.codegym.task.task19.task1916;
import java.util.ArrayList;
import java.util.List;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.FileReader;
/*
Tracking changes
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<>();
public static void main(String[] args) {
try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileReaderOne = new BufferedReader(new FileReader(reader.readLine()));
BufferedReader fileReaderTwo = new BufferedReader(new FileReader(reader.readLine()))) {
ArrayList<String> fileOneLines = new ArrayList<>();
ArrayList<String> fileTwoLines = new ArrayList<>();
while(fileReaderOne.ready()) {
String line = fileReaderOne.readLine();
fileOneLines.add(line);
}
while(fileReaderTwo.ready()) {
String line = fileReaderTwo.readLine();
fileTwoLines.add(line);
}
ArrayList<String> fileOneCopy = new ArrayList<>();
ArrayList<String> fileTwoCopy = new ArrayList<>();
fileOneCopy.addAll(fileOneLines);
fileTwoCopy.addAll(fileTwoLines);
int x = 0;
int y = 0;
for (int i = 0; i < fileOneLines.size(); i++) {
if (fileOneCopy.get(x).equals(fileTwoCopy.get(y))) {
x++;
y++;
} else {
x++;
if (fileOneCopy.get(x).equals(fileTwoCopy.get(y))) {
fileTwoCopy.add(x - 1, "empty");
y++;
} else {
x--;
}
y++;
if (fileOneCopy.get(x).equals(fileTwoCopy.get(y))) {
fileOneCopy.add(y - 1, "empty");
x++;
} else {
y--;
}
}
}
while(fileOneCopy.size() != fileTwoCopy.size()) {
if (fileOneCopy.size() > fileTwoCopy.size()) {
fileTwoCopy.add("empty");
} else if (fileOneCopy.size() < fileTwoCopy.size()){
fileOneCopy.add("empty");
}
}
for (int i = 0; i < fileOneCopy.size(); i++) {
if (fileOneCopy.get(i).equals(fileTwoCopy.get(i))) {
lines.add(new LineItem(Type.SAME, fileOneCopy.get(i)));
} else if (fileOneCopy.get(i).equals("empty")) {
lines.add(new LineItem(Type.ADDED, fileTwoCopy.get(i)));
} else if (fileTwoCopy.get(i).equals("empty")) {
lines.add(new LineItem(Type.REMOVED, fileOneCopy.get(i)));
}
}
for (LineItem lineItem : lines) {
switch (lineItem.type) {
case ADDED:
System.out.println("ADDED " + lineItem.line);
break;
case REMOVED:
System.out.println("REMOVED " + lineItem.line);
break;
case SAME:
System.out.println("SAME " + lineItem.line);
break;
}
}
} catch (FileNotFoundException e) {
System.out.println("File not found");
} catch (IOException e) {
System.out.println("Something went wrong");
}
}
public static enum Type {
ADDED, // New line added
REMOVED, // Line deleted
SAME // No change
}
public static class LineItem {
public Type type;
public String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}