I think this is what they are looking for. Obviously the result would be in the proper format...
![]()

package com.codegym.task.task19.task1916;
import java.io.BufferedReader;
import java.io.FileReader;
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 Exception {
BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
String fileName1 = re.readLine();
String fileName2 = re.readLine();
//String fileName1 = "C:\\Users\\Alfred\\Documents\\CodeGym Data Files for exercizes\\File1.txt";
//String fileName2 = "C:\\Users\\Alfred\\Documents\\CodeGym Data Files for exercizes\\File2.txt";
re.close();
BufferedReader flb1 = new BufferedReader(new FileReader(fileName1));
ArrayList<String> file1 = new ArrayList<String>();
while (flb1.ready()) {
String line = flb1.readLine();
file1.add(line);
}
flb1.close();
BufferedReader flb2 = new BufferedReader(new FileReader(fileName2));
ArrayList<String> file2 = new ArrayList<String>();
while (flb2.ready()) {
String line2 = flb2.readLine();
file2.add(line2);
}
file2.add("");
file2.add("");
file2.add("");
file2.add("");
flb2.close();
boolean ck = false;
// ++++++++++++++++++++++++++ test to see what is in arrays ++++++++++++++++++++++++
/*
for (int i = 0; i < file1.size(); i++) {
System.out.println(i + " " + file1.get(i));
}
System.out.println();
System.out.println("---------------------");
System.out.println();
for (int i = 0; i < file2.size(); i++) {
System.out.println(i + " " + file2.get(i));
}
System.out.println();
System.out.println();
*/
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! THE CRAZY STARTS HERE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
for (int i = 0; i < file1.size(); i++) {
// ________________________ Print out info at the beginning For each loop .....................
/*
System.out.println("--------------------------------------");
System.out.println("Loop i = " + i);
System.out.println();
System.out.println("Original File :" + file1.get(i));
System.out.println("New File :" + file2.get(i));
System.out.println();
*/
// ---------------------- L1(i) AND L2(i) MATCH ------------
if (file1.get(i).equals(file2.get(i))) {
lines.add(new LineItem(Type.SAME, file1.get(i)));
} else { // ------------ L1(i) AND L2(i) DONT MATCH ------------
ck = false;
for (int j = i; j < file2.size(); j++)
if (file1.get(i).equals(file2.get(j))) {
ck = true;
}
if (ck) {
ck = false;
for (int j = i; j < file1.size(); j++) {
if (file2.get(i).equals(file1.get(j))) {
ck = true;
}
}
if (ck) {
if (!file2.get(i).equals("")){ lines.add(new LineItem(Type.SAME, file2.get(i)));}
} else {
ck = false;
for (int j = 0; j < file1.size(); j++) {
if (file2.get(i).equals(file1.get(j))) {
ck = true;
}
}
if (!ck) {
lines.add(new LineItem(Type.ADDED, file2.get(i)));
}
}
if (!file1.get(i).equals("")) {
lines.add(new LineItem(Type.SAME, file1.get(i)));
}
} else {
ck = false;
for (int j = 0; j < file2.size(); j++)
if (file1.get(i).equals(file2.get(j))) {
ck = true;
}
if (!ck) {
lines.add(new LineItem(Type.REMOVED, file1.get(i)));
}
//
ck = false;
for (int j = i; j < file1.size(); j++)
if (file2.get(i).equals(file1.get(j))) {
ck = true;
}
if ((ck == true) && (!file2.get(i).equals(""))) {
lines.add(new LineItem(Type.SAME, file2.get(i)));
} else {
if (!file2.get(i).equals("")) {
ck = false;
for (int j = 0; j < file1.size(); j++) {
if (file2.get(i).equals(file1.get(j))) {
ck = true;
}
}
if (!ck) {
lines.add(new LineItem(Type.ADDED, file2.get(i)));
}
}
}
}
}
/*
// ------------ Printing out results at end of each loop ______________
System.out.println("List finish Contents:");
for (int l = 0; l < lines.size(); l++) {
System.out.println(lines.get(l).type + " " + lines.get(l).line);
}
*/
}
// --------------------------- // end of loop -------------
}
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;
}
}
}
/*
// ---------------------- L1(I) AND L2(I) MATCH ------------
if (file1.get(i).equals(file2.get(i))) {
lines.add(new LineItem(Type.SAME, file1.get(i)));
System.out.println("Break at 1");
System.out.println();
System.out.println("List finish Contents:");
for (int l = 0; l < lines.size(); l++){
System.out.println(lines.get(l).type +" "+lines.get(l).line);
}
continue;
}
// ____________ i = 0 first line ---------------------
if (i==0){
if (!file1.get(i).equals(file2.get(i))) {
lines.add(new LineItem(Type.REMOVED, file1.get(i)));
}
if (file1.get(i).equals(file2.get(i+1))) {
lines.add(new LineItem(Type.SAME, file2.get(i)));
lines.add(new LineItem(Type.SAME, file1.get(i)));
}
System.out.println("Break at 00");
System.out.println();
System.out.println("List finish Contents:");
for (int l = 0; l < lines.size(); l++){
System.out.println(lines.get(l).type +" "+lines.get(l).line);
}
continue;
}
// ----------- fl1 matches next fl2 Line B2-----------------
if (file1.get(i).equals(file2.get(i + 1))) {
lines.add(new LineItem(Type.ADDED, file2.get(i)));
if ((!file1.get(i - 1).equals(file2.get(i)))
&& (!file1.get(i + 1).equals(file2.get(i)))) { // fl2 no match fl1 + 1
lines.add(new LineItem(Type.SAME, file1.get(i)));
}
System.out.println("Break at 2");
System.out.println();
System.out.println("List finish Contents:");
for (int l = 0; l < lines.size(); l++){
System.out.println(lines.get(l).type +" "+lines.get(l).line);
}
continue;
}
// -------------------- fl1 matches previous fl2 B3 ---------------
/* if ((file1.get(i).equals(file2.get(i - 1)))
|| (file1.get(i).equals(file2.get(i - 2)))){
lines.add(new LineItem(Type.SAME, file1.get(i)));
if ((!file1.get(i - 1).equals(file2.get(i)))
|| (!file1.get(i + 1).equals(file2.get(i)))){
lines.add(new LineItem(Type.ADDED, file2.get(i)));
}
____________________________________________________________________
boolean ck1 = false;
for (int j = 0; j < file2.size(); j++)
if (file1.get(i).equals(file2.get(j))){
ck1 = true;
}
if ( ck1 == true) {
lines.add(new LineItem(Type.SAME, file1.get(i)));
// check to see if FL2(i) is in Fl1 ===
boolean ck2 = false;
for (int j = 0; j < file1.size(); j++)
if (file2.get(i).equals(file1.get(j))){
ck2 = true;
}
if ((!ck2 == true) && (!file2.get(i).equals(""))){
lines.add(new LineItem(Type.ADDED, file2.get(i)));
}
System.out.println("Break at 3");
System.out.println();
System.out.println("List finish Contents:");
for (int l = 0; l < lines.size(); l++){
System.out.println(lines.get(l).type +" "+lines.get(l).line);
}
continue;
}
// ___________ FL1 (i) matches FL2 (i-2) ----------------
if (file1.get(i).equals(file2.get(i - 2))) {
lines.add(new LineItem(Type.SAME, file1.get(i)));
System.out.println("FL1 (i) matches FL2 (i-2)");
System.out.println();
System.out.println("List finish Contents:");
for (int l = 0; l < lines.size(); l++){
System.out.println(lines.get(l).type +" "+lines.get(l).line);
}
continue;
}
// --------------- fl1 matches no line ------------------------
boolean ck5 = false;
for (int j = 0; j < file2.size(); j++)
if (file1.get(i).equals(file2.get(j))){
ck5 = true;
}
if ( ck5 == false) {
lines.add(new LineItem(Type.REMOVED, file1.get(i)));
System.out.println(" FL1 matches no line");
System.out.println();
System.out.println("List finish Contents:");
for (int l = 0; l < lines.size(); l++) {
System.out.println(lines.get(l).type + " " + lines.get(l).line);
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/*
public class Solution {
public static List<LineItem> lines = new ArrayList<>();
public static void main(String[] args) throws Exception {
BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
// String fileName1 = re.readLine();
//String fileName2 = re.readLine();
String fileName1 = "C:\\Users\\Alfred\\Documents\\CodeGym Data Files for exercizes\\File1.txt";
String fileName2 = "C:\\Users\\Alfred\\Documents\\CodeGym Data Files for exercizes\\File2.txt";
re.close();
BufferedReader flb1 = new BufferedReader(new FileReader(fileName1));
ArrayList<String> file1 = new ArrayList<String>();
while (flb1.ready()) {
String line = flb1.readLine();
file1.add(line);
}
flb1.close();
BufferedReader flb2 = new BufferedReader(new FileReader(fileName2));
ArrayList<String> file2 = new ArrayList<String>();
while (flb2.ready()) {
String line2 = flb2.readLine();
file2.add(line2);
}
file2.add("");
file2.add("");
flb2.close();
// test to see what is in arrays
for (int i = 0; i < file1.size(); i++) {
System.out.println(i + " " + file1.get(i));
}
System.out.println();
System.out.println("---------------------");
System.out.println();
for (int i = 0; i < file2.size(); i++) {
System.out.println(i + " " + file2.get(i));
}
System.out.println();
System.out.println("=========================================================");
System.out.println();
Type lastType = Type.SAME;
int j = 0;
// THE CRAZY STARTS HERE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
for (int i = 0; i < file1.size(); i++) {
System.out.println("--------------------------------------");
System.out.println("start of loop " + i + ", Last type recorded " + lastType);
System.out.println();
switch (lastType) {
case SAME: {System.out.println("SAME CASE---");
if ((file1.get(i).equals(file2.get(i)))
|| (file1.get(i).equals(file2.get(i - 1)))
|| (file1.get(i).equals(file2.get(i )))){
lines.add(new LineItem(Type.SAME, file1.get(i)));
System.out.println("SAME written to lines");
j++;
lastType = Type.SAME;
}else {
if (!file2.get(i).equals(file1.get(i - 1))
&& (!file2.get(i).equals(file1.get(i + 1)))) {
lines.add(new LineItem(Type.ADDED, file2.get(i)));
System.out.println("ADDED written to lines");
j++;
lastType = Type.ADDED;
}
if ((!file1.get(i).equals(file2.get(i)))
&& ((!file1.get(i).equals(file2.get(i + 1)))
&& (!file1.get(i).equals(file2.get(i - 1))))) {
lines.add(new LineItem(Type.REMOVED, file1.get(i)));
System.out.println("REMOVED written to lines");
lastType = Type.REMOVED;
break;
}
}
break;
}
case REMOVED: {System.out.println("REMOVED CASE----");
lines.add(new LineItem(Type.SAME, file1.get(i)));
System.out.println("SAME written to lines");
lastType = Type.SAME;
if ((!file2.get(i).equals(file1.get(i)))
|| (!file2.get(i).equals(file1.get(i + 1)))
|| (!file2.get(i).equals(file1.get(i - 1)))) {
lines.add(new LineItem(Type.ADDED, file2.get(i + 1)));
lastType = Type.ADDED;
}
break;
}
case ADDED: {System.out.println("ADDED CASE---");
lines.add(new LineItem(Type.SAME, file1.get(i-1)));
System.out.println("SAME written to lines");
i--;
lastType = Type.SAME;
break;
}
}
System.out.println();
System.out.println("List Contents:");
for (int l = 0; l < lines.size(); l++){
System.out.println(lines.get(l).type +" "+lines.get(l).line);
} System.out.println();
System.out.println();
}// end of loop
System.out.println("+++++++++ PRINT THAT MESS +++++++++");
System.out.println();
for (int l = 0; l < lines.size(); l++){
System.out.println(lines.get(l).type +" "+lines.get(l).line);
}
}
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;
}
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class Solution {
public static List<LineItem> lines = new ArrayList<>();
public static void main(String[] args) throws Exception{
BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
// String fileName1 = re.readLine();
//String fileName2 = re.readLine();
String fileName1 = "C:\\Users\\Alfred\\Documents\\CodeGym Data Files for exercizes\\File1.txt";
String fileName2 ="C:\\Users\\Alfred\\Documents\\CodeGym Data Files for exercizes\\File2.txt";
re.close();
BufferedReader flb1 = new BufferedReader(new FileReader(fileName1));
ArrayList<String> file1 = new ArrayList<String>();
while (flb1.ready()) {
String line = flb1.readLine();
file1.add(line);
}
flb1.close();
BufferedReader flb2 = new BufferedReader(new FileReader(fileName2));
ArrayList<String> file2 = new ArrayList<String>();
while (flb2.ready()) {
String line2= flb2.readLine();
file2.add(line2);
}
file2.add("");
file2.add("");
flb2.close();
// test to see what is in arrays
for(int i =0;i<file1.size();i++){
System.out.println(i+" "+file1.get(i));
}
System.out.println();
System.out.println("---------------------");
System.out.println();
for(int i =0;i<file2.size();i++){
System.out.println(i+" "+file2.get(i));
}
System.out.println();
System.out.println("=========================================================");
System.out.println();
int f=0;
int ck = 0;
for (int i = 0; i < file1.size(); i++){
System.out.println(i+" "+f);
if (file1.get(i).equals(file2.get(i))) {
if (f ==0 ) {
lines.add(new LineItem(Type.SAME, file1.get(i)));
}
}
else{
if (i+2+f < file2.size()) {
if (file1.get(i).equals(file2.get(i + 1))) {
lines.add(new LineItem(Type.ADDED, file2.get(i)));
lines.add(new LineItem(Type.SAME, file2.get(i + 1)));
f = 1; ck = 1;
} else if (!file1.get(i).equals(file2.get(i + f))) {
lines.add(new LineItem(Type.REMOVED, file1.get(i)));
if (i != file2.size()-4) {
lines.add(new LineItem(Type.SAME, file2.get(i + 1)));
}
f = 1; ck = 1;
}
}
}
if (i > (file2.size()-3) ){
lines.add(new LineItem(Type.REMOVED, file1.get(i)));
}
if ((i == (file2.size()-3)) && (ck == 0)){
lines.add(new LineItem(Type.SAME, file1.get(i)));
ck=0;
}
if (i == (file2.size()-4) ){
lines.add(new LineItem(Type.ADDED, file2.get(i+1)));
}
System.out.println("_______________");
System.out.println(lines.size());
for (int l = 0; l < lines.size(); l++){
System.out.println(lines.get(l).type +" "+lines.get(l).line);
}
System.out.println(i+" "+f);
}
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
for (int l = 0; l < lines.size(); l++){
System.out.println(lines.get(l).type +" "+lines.get(l).line);
}
}
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;
}
}
}
*/