Не получается найти вариант данных ввода, при котором программа не работает.😥
Рекомендация ментора: Убедись, что список lines в нужных местах содержит операции REMOVED c нужными строками.
Строк кода много, в основном из-за тестов и sout-ов для отслеживания работы программы. Все несущественное закоментил.
Различные вариации FileReader-ов представляют собой различные тесты программы, после каждого reader в скобках содержимое файла.
Задача крутая, но разбираюсь второй день😵, а хочется двинуть дальше.
Буду очень признателен тому, кто предложит проблемное содержимое файлов.🤗
Спасибо всем кто уделит время, хорошего дня и продуктивной учебы! 🤓
p.s. коммент в 95 строке с ошибкой, правильно "вторая строка списка один равна первой списка 2"
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));
String firstFile = reader.readLine();
String secondFile = reader.readLine();
reader.close();
FileReader reader1 = new FileReader(firstFile);
FileReader reader2 = new FileReader(secondFile);
/*FileReader reader1 = new FileReader("d:/test11.txt"); // (1 2)
FileReader reader2 = new FileReader("d:/test12.txt"); // (2)*/
/*FileReader reader1 = new FileReader("d:/test21.txt"); // (1)
FileReader reader2 = new FileReader("d:/test22.txt");*/ // (1 2)
/*FileReader reader1 = new FileReader("d:/test31.txt"); // ()
FileReader reader2 = new FileReader("d:/test32.txt"); // (1)*/
/*FileReader reader1 = new FileReader("d:/test41.txt"); // (1)
FileReader reader2 = new FileReader("d:/test42.txt");*/ // (3)
/*FileReader reader1 = new FileReader("d:/test51.txt"); // (1 2 3 4 5 1 2 3 5 0)
FileReader reader2 = new FileReader("d:/test52.txt");*/ // (1 3 5 0 1 3 4 5)
/*FileReader reader1 = new FileReader("d:/test61.txt"); // (1)
FileReader reader2 = new FileReader("d:/test62.txt"); // ()*/
/*FileReader reader1 = new FileReader("d:/test71.txt"); // (1 2 3 4 5 6 7)
FileReader reader2 = new FileReader("d:/test72.txt"); // (1 3 5 7)*/
// Заполняем списки:
BufferedReader bufferedReader1 = new BufferedReader(reader1);
BufferedReader bufferedReader2 = new BufferedReader(reader2);
List<String> data1 = new ArrayList<>();
List<String> data2 = new ArrayList<>();
List<LineItem> lines = new ArrayList<>();
while (bufferedReader1.ready()) {
data1.add(bufferedReader1.readLine());
}
bufferedReader1.close();
reader1.close();
while (bufferedReader2.ready()) {
data2.add(bufferedReader2.readLine());
}
bufferedReader2.close();
reader2.close();
// Обработка:
while (data1.size() > 0 && data2.size() > 0) {
// System.out.println("сравниваем " + data1.get(0) + " и " + data2.get(0));
try {
if (data1.get(0).equals(data2.get(0))) {
lines.add(new LineItem(Type.SAME, data1.get(0)));
/* System.out.println(" 1 вариант: строки равны....");
System.out.println("same " + data1.get(0));
System.out.println("удаляем из первого " + data1.get(0));
System.out.println("удаляем из второго " + data2.get(0));*/
data1.remove(0);
data2.remove(0);
}
if (data1.get(0).equals(data2.get(1))) {
lines.add(new LineItem(Type.ADDED, data2.get(0)));
lines.add(new LineItem(Type.SAME, data1.get(0)));
/*System.out.println(" 2 вариант: строки не равны, но первая списка 1 равна второй списка 2...");
System.out.println("added " + data2.get(0));
System.out.println("same" + data1.get(0));
System.out.println("удаляем из первого " + data1.get(0));
System.out.println("удаляем из второго " + data2.get(0));*/
data1.remove(0);
data2.remove(0);
//System.out.println("удаляем из второго " + data2.get(0));
data2.remove(0);
} else if (!data1.get(0).equals(data2.get(1))) {
lines.add(new LineItem(Type.REMOVED, data1.get(0)));
/*System.out.println(" 3 вариант: строки не равны, первая из списка 1 также не ровна второй из списка 2");
System.out.println("removed " + data1.get(0));
System.out.println("удаляем из первого " + data1.get(0));*/
data1.remove(0);
}
// ловим исключение, если строке не равны и в списке 2 только 1 строка
} catch (IndexOutOfBoundsException e) {
if (data1.size() >= 2 && data1.get(1).equals(data2.get(0))) {
//System.out.println(" 4 вариант: вторая строка из списка 2 равна первой из списка один списка");
lines.add(new LineItem(Type.REMOVED, data1.get(0)));
lines.add(new LineItem(Type.SAME, data1.get(1)));
//System.out.println("удаляем из первого" + data1.get(0));
data1.remove(0);
/*System.out.println("удаляем из первого" + data1.get(0));
System.out.println("удаляем из второго" + data2.get(0));*/
data1.remove(0);
data2.remove(0);
} else break; //в обоих списках максимум одна строка и они не равны.
}
}
// проверяем остатки в списках:
if (data1.size() > 0) {
for (String removed : data1
) {
lines.add(new LineItem(Type.REMOVED, removed));
/*System.out.println("остатки в первой");
System.out.println("removed " + removed);*/
}
}
if (data2.size() > 0) {
for (String added : data2
) {
lines.add(new LineItem(Type.ADDED, added));
/*System.out.println("остатки во второй");
System.out.println("added " + added);*/
}
}
/*for (LineItem item : lines
) {
System.out.println(item.type + " " + item.line);
}*/
}
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;
}
}
}
// Ошибка валидцаии: Убедись, что список lines в нужных местах содержит операции REMOVED c нужными строками.