Не проходит последний пункт
Тестировал со списками:
строка1 строка1
строка3 строка2
строка5 строка3
строка2 строка4
строка4 строка5
строка1
строка2
строка3
строка4
строка5
_________________
Список из условия:
строка1 строка1
строка2 строка3
строка3 строка5
строка4 строка0
строка5 строка1
строка1 строка3
строка2 строка4
строка3 строка5
строка5
строка0
___________________
строка1 строка1
строка3 строка2
строка4 строка3
строка5 строка5
строка2 строка1
строка3 строка2
строка5 строка4
строка0 строка5
package com.javarush.task.task19.task1916;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) throws IOException {
//считываем имена файлов
BufferedReader fnreader = new BufferedReader(new InputStreamReader(System.in));
String fileone = fnreader.readLine();
String filetwo = fnreader.readLine();
fnreader.close();
//считываем файл1 в список
BufferedReader inputone = new BufferedReader(new FileReader(fileone));
ArrayList<String> listOne = new ArrayList<>();
String line = null;
while ((line = inputone.readLine())!= null){
listOne.add(line);
}inputone.close();
//считываем файл2 в список
BufferedReader inputtwo = new BufferedReader(new FileReader(filetwo));
ArrayList<String> listTwo = new ArrayList<>();
while ((line = inputtwo.readLine())!= null){
listTwo.add(line);
}inputtwo.close();
//сравниваем длину списка
if (listOne.size() > listTwo.size()) {
//если список 1 больше то:
int i =0;
while (i < listOne.size()) {
//если список 2 закончился
if (i > listTwo.size()-1){//то значения списка 1 в нем более не присутствуют
lines.add(new LineItem(Type.REMOVED, listOne.get(i))); listTwo.add("REMOVED");
}
//если строки равны то:
else if (listOne.get(i).equals(listTwo.get(i))){
lines.add(new LineItem(Type.SAME, listOne.get(i)));
}
//если строки не равны то:
else if (!(listOne.get(i).equals(listTwo.get(i)))){
if (listOne.get(i+1).equals(listTwo.get(i))){ //если следующая строка первого списка равна то:
lines.add(new LineItem(Type.REMOVED, listOne.get(i))); listTwo.add(i, "REMOVED"); //+выравниваем списки
}//если не равна то строка считается добвленной, выравниваем списки
else {lines.add(new LineItem(Type.ADDED, listTwo.get(i))); listOne.add(i, "ADDED");}
}//System.out.println(listOne.get(i) + " " + listTwo.get(i));
i++;
}
}
//если список 2 больше то:
else if (listOne.size() < listTwo.size()){
int i =0;
while (i < listTwo.size()) {
//если список 1 закончился
if (i > listOne.size()-1){//то значения списка 2 новые
lines.add(new LineItem(Type.ADDED, listTwo.get(i))); listOne.add("ADDED");
}
//если строки равны то:
else if (listTwo.get(i).equals(listOne.get(i))){
lines.add(new LineItem(Type.SAME, listTwo.get(i)));
}
//если строки не равны то:
else if (!(listTwo.get(i).equals(listOne.get(i)))){
if (listTwo.get(i+1).equals(listOne.get(i))){ //если следующая строка второго списка равна то:
lines.add(new LineItem(Type.ADDED, listTwo.get(i))); listOne.add(i, "ADDED"); //+выравниваем списки
}//если не равна то строка считается удаленной, выравниваем списки
else {lines.add(new LineItem(Type.REMOVED, listOne.get(i))); listTwo.add(i, "REMOVED");}
}//System.out.println(listOne.get(i) + " " + listTwo.get(i));
i++;
}
}//если списки равны то:
else {
int i =0;
while (i < listOne.size()) {
//если список 2 закончился
if (i > listTwo.size()-1){//то значения списка 1 в нем более не присутствуют
lines.add(new LineItem(Type.REMOVED, listOne.get(i))); listTwo.add("REMOVED");
}
//если список 1 закончился
else if (i > listOne.size()-1){//то значения списка 2 новые
lines.add(new LineItem(Type.ADDED, listTwo.get(i))); listOne.add("ADDED");
}
//если строки равны то:
else if (listOne.get(i).equals(listTwo.get(i))){
lines.add(new LineItem(Type.SAME, listOne.get(i)));
}
//если строки не равны то:
else if (!(listOne.get(i).equals(listTwo.get(i)))){
if (listOne.get(i+1).equals(listTwo.get(i))){ //если следующая строка первого списка равна то:
lines.add(new LineItem(Type.REMOVED, listOne.get(i))); listTwo.add(i, "REMOVED"); //+выравниваем списки
}//если не равна то строка считается добвленной, выравниваем списки
else {lines.add(new LineItem(Type.ADDED, listTwo.get(i))); listOne.add(i, "ADDED");}
}//System.out.println(listOne.get(i) + " " + listTwo.get(i));
i++;
}
}
/*for (LineItem next : lines){
System.out.println(next.type + " " + next.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;
}
}
}
