Изменил, проверил. Теперь не могу понять как заставить работать нормально. Проходит все проверки кроме одной: "Список lines должен содержать объединенную версию строк из файлов, где для каждой строки указана одна из операций ADDED, REMOVED, SAME." Считать с консоли 2 имени файла — file1, file2. Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают. Нужно создать объединенную версию строк, записать их в список lines. Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME. В оригинальном и редактируемом файлах пустых строк нет. Пример: file1: file2: ожидаемый результат:(lines) реальный вывод на данный момент: строка1 строка1 SAME строка1 SAME строка1 строка2 REMOVED строка2 REMOVED строка2 строка3 строка3 SAME строка3 SAME строка3 строка4 REMOVED строка4 REMOVED строка4 строка5 строка5 SAME строка5 SAME строка5 строка0 ADDED строка0 ADDED строка0 строка1 строка1 SAME строка1 SAME строка1 строка2 REMOVED строка2 REMOVED строка2 строка3 строка3 SAME строка3 SAME строка3 строка5 ADDED строка5 ADDED строка5 строка4 строка4 SAME строка4 SAME строка4 строка5 REMOVED строка5 (и вот последнее как раз не выводит) Требования: 1. Класс Solution должен содержать класс LineItem. 2. Класс Solution должен содержать enum Type. 3. Класс Solution должен содержать публичное статическое поле lines типа List, которое сразу проинициализировано. 4. В методе main(String[] args) программа должна считывать имена файлов с консоли (используй BufferedReader). 5. В методе main(String[] args) BufferedReader для считывания данных с консоли должен быть закрыт. 6. Программа должна считывать содержимое первого и второго файла (используй FileReader). 7. Потоки чтения из файлов (FileReader) должны быть закрыты. 8. Список lines должен содержать объединенную версию строк из файлов, где для каждой строки указана одна из операций ADDED, REMOVED, 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) {
        String fileName1 = "";
        String fileName2 = "";
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
            fileName1 = reader.readLine();
            fileName2 = reader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            new ReadIt(fileName1, fileName2).compare();
        } catch (IOException e) {
            e.printStackTrace();
        }

     //   System.out.println(lines);
    }


    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 this.type.toString() + " : " + this.line.toString() + "\n";
        }*/
    }

    public static class ReadIt {
        private BufferedReader fileOne;
        private BufferedReader fileTwo;
        private List<String> array1 = new ArrayList<>();
        private List<String> array2 = new ArrayList<>();

        public ReadIt(String str1, String str2) {
            try {
                fileOne = new BufferedReader(new FileReader(str1));
                fileTwo = new BufferedReader(new FileReader(str2));

                while (fileOne.ready()) {
                    array1.add(fileOne.readLine());
                }

                while (fileTwo.ready()) {
                    array2.add(fileTwo.readLine());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

        public void compare() throws IOException {
            int i = 0, j = 0;
            for (; i < array1.size() & j < array2.size(); ) {

                try {
                    if (array1.get(i).equals(array2.get(j))) {
                        lines.add(new LineItem(Type.SAME, array1.get(i)));
                        j++;
                        i++;
                    } else if (array1.get(i).equals(array2.get(j + 1))) {
                        lines.add(new LineItem(Type.ADDED, array2.get(j)));
                        j++;
                    } else {
                        lines.add(new LineItem(Type.REMOVED, array1.get(i)));
                        i++;
                    }
                } catch (Exception e) {
                    if (i >= j) lines.add(new LineItem(Type.ADDED, array2.get(j)));
                    else if (i < j) lines.add(new LineItem(Type.REMOVED, array1.get(i)));
                }
            }

            fileOne.close();
            fileTwo.close();
        }

    }
}