level19.lesson10.bonus01 Не проходит тестирование, помогите!

Перечитал кучу топиков, сделал решение которое работает, не могу понять в чем проблема! Никак не хочет проходить тестирование, воистину, самое сложно задание которое было до этого!!! Ребята, в чем проблема, почему не хочет принимать?:(((
Условие уже написал «исправленное», так как оригинальное условие содержит ошибку.
package com.javarush.test.level19.lesson10.bonus01;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/* Отслеживаем изменения
Считать в консоли 2 имени файла - file1, file2.
Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают.
Нужно создать объединенную версию строк, записать их в список lines
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME
Пример:
оригинальный   редактированный    общий
file1:         file2:             результат:(lines)

строка1        строка1            SAME строка1
cтрока2                           REMOVED строка2
строка3        строка3            SAME строка3
строка4                           REMOVED строка4
строка5        строка5            SAME строка5
               строка0            ADDED строка0
строка1        строка1            SAME строка1
строка2                           REMOVED строка2
строка3        строка3            SAME строка3
               строка5            ADDED строка5
строка4        строка4            SAME строка4
строка5                           REMOVED строка5
*/

public class Solution {
    public static List<LineItem> lines = new ArrayList<LineItem>();

    public static void main(String[] args) throws Exception {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String fileName1 = bufferedReader.readLine();
        String fileName2 = bufferedReader.readLine();

        bufferedReader.close();
        BufferedReader fileReader1 = new BufferedReader(new FileReader(fileName1));
        BufferedReader fileReader2 = new BufferedReader(new FileReader(fileName2));
        while (fileReader1.ready() || fileReader2.ready()) {
            if (fileReader1.ready() && fileReader2.ready()) {
                String s1 = fileReader1.readLine();
                String s2 = fileReader2.readLine();
                if (s1.equals(s2)) {
                    lines.add(new LineItem(Type.SAME, s1));
                } else if ("".equals(s1)) {
                    lines.add(new LineItem(Type.ADDED, s2));
                } else if ("".equals(s2)) {
                    lines.add(new LineItem(Type.REMOVED, s1));
                }
            } else if (!fileReader1.ready() && fileReader2.ready()) {
                String s2 = fileReader2.readLine();
                lines.add(new LineItem(Type.ADDED, s2));
            } else if (fileReader1.ready() && !fileReader2.ready()) {
                String s1 = fileReader1.readLine();
                lines.add(new LineItem(Type.REMOVED, s1));
            }
        }
        fileReader1.close();
        fileReader2.close();
    }

    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;
        }
    }
}

7 комментариев

vampirit
if (fileReader1.ready() && fileReader2.ready()) {
                String s1 = fileReader1.readLine();
                String s2 = fileReader2.readLine();
                if (s1.equals(s2)) {
                    lines.add(new LineItem(Type.SAME, s1));
                } else if ("".equals(s1)) {
                    lines.add(new LineItem(Type.ADDED, s2));
                } else if ("".equals(s2)) {
                    lines.add(new LineItem(Type.REMOVED, s1));
                }


т.е. если в обоих файлах есть строки, но сторки не равны, то вы их просто игнорите?
Archie369
Ну там по условию либо added, либо removed, либо same, указанный вами случай не должен встречаться. Или я чего-то недопонимаю((
vampirit
  • vampirit
  • +1
  • Комментарий отредактирован 2017-06-01 16:39:56 пользователем vampirit
привет      мир      ADDED
голова      привет   SAME
            голова    SAME


строка «мир» была добавлена перед «привет»

по логике вашего кода обе строки будут проигнорированы т.к. вы рассматриваете только равность или пустоту строк.

Как сказали ниже в условии не корректный пример (но другой был бы не ясен)

В файлах строки идут подряд(без пропуска), анализируя их вы решаете, добавления ли эта строка, удалена или оставлена без изменений =)
Archie369
Спасибо! Так понятней!
averonchik
Строки идут без пропусков. В условии не корректный пример.
Archie369
Благодарю! Сам бы не догадался!
Archie369
Сдал задачу, всем спасибо за помощь!
очень помогло графическое пояснение в этой теме:
info.javarush.ru/JavaRush_tasks_discussion/2016/02/14/level19-lesson10-bonus01-Графическое-пояснение-условия-задачи-.html
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.