one is connected to the other.. loop within a loop and i think it needs more nesting or not!! Any help would be great..please show me the way :)
package com.codegym.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;
/*
Tracking changes
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file1 = reader.readLine();
String file2 = reader.readLine();
reader.close();
// String file1 = "C:/Users/Dan/Desktop/codegym test files/test1.txt";
// String file2 = "C:/Users/Dan/Desktop/codegym test files/test2updated.txt";
ArrayList<String> file1List = new ArrayList<>();
ArrayList<String> file2List = new ArrayList<>();
BufferedReader bufferedReader1 = new BufferedReader(new FileReader(file1));
BufferedReader bufferedReader2 = new BufferedReader(new FileReader(file2));
while(bufferedReader1.ready()) {
String l1 = bufferedReader1.readLine();
file1List.add(l1);
}
while(bufferedReader2.ready()) {
String l2 = bufferedReader2.readLine();
file2List.add(l2);
}
bufferedReader1.close();
bufferedReader2.close();
String typeTracker = "";
for (int i = 0; i < file1List.size() - 1; i++) {
if (typeTracker.equals("")) {
if (file2List.get(i).equals(file1List.get(i))) {
lines.add(new LineItem(Type.SAME, file1List.get(i)));
typeTracker = "same";
} else if (!file2List.get(i).equals(file1List.get(i))) {
if (file2List.get(i + 1).equals(file1List.get(i))) {
lines.add(new LineItem(Type.ADDED, file2List.get(i)));
typeTracker = "added";
} else {
lines.add(new LineItem(Type.REMOVED, file1List.get(i)));
typeTracker = "removed";
}
}
} else if (typeTracker.equals("same")) {
if (file2List.get(i + 1).equals(file1List.get(i))) {
lines.add(new LineItem(Type.ADDED, file2List.get(i)));
typeTracker = "added";
} else {
lines.add(new LineItem(Type.REMOVED, file1List.get(i - 1)));
typeTracker = "removed";
}
} else if (typeTracker.equals("added")) {
if (file1List.get(i - 1).equals(file2List.get(i))) {
lines.add(new LineItem(Type.SAME, file1List.get(i - 1)));
typeTracker = "same";
i = i -1;
}
} else if (typeTracker.equals("removed")) {
if (file1List.get(i -1).equals(file2List.get(i - 1))) {
lines.add(new LineItem(Type.SAME, file1List.get(i - 1)));
typeTracker = "same";
i = i - 1;
}
}
}
System.out.println(file1List.toString());
System.out.println(file2List.toString());
for (LineItem i : lines) {
System.out.println(i.toString());
}
}
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;
}
@Override
public String toString() {
return type + " " + line;
}
}
}