JavaRush
AI Academy
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Подскажите что не так?
Алексей
19 уровень
  • 09.03.2018
  • 638просмотров
  • 4комментариев

Подскажите что не так?

Вопрос по задаче Отслеживаем изменения
Java Core,  9 уровень,  11 лекция
Решен


Считать с консоли 2 пути к файлам - file1, file2.
Файлы содержат строки. Так как file2 является обновленной версией file1, то часть строк совпадает.
Нужно создать объединенную версию строк из обоих файлов и записать эти строки в список lines.
Правила объединения:

  1. Если строка в обоих файлах совпадает, то в результат она попадает с операцией (приставкой) SAME.
    Например, SAME строка1.
  2. Если строка есть в file1, но ее нет в file2, то считаем, что строку удалили и в результат она попадает с операцией (приставкой) REMOVED.
    Например, REMOVED строка2.
  3. Если строки нет в file1, но она есть в file2, то считаем, что строку добавили и в результат она попадает с операцией (приставкой) ADDED.
    Например, ADDED строка0.
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME.
Пустые строки даны в примере для наглядности и означают, что этой строки нет в определенном файле.
В оригинальном и редактируемом файлах пустых строк нет!

Пример 1:
содержимое оригинального файл (file1):
строка1
строка2
строка3
строка4
строка5
строка1
строка2
строка3
строка5
строка0

содержимое "редактированного" файла (file2):
строка1
строка3
строка5
строка0
строка1
строка3
строка4
строка5

результат объединения:
оригинальный    редактированный    общий
file1:          file2:             результат:(lines)
 
строка1         строка1            SAME строка1
строка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
                строка4            ADDED строка4
строка5         строка5            SAME строка5
строка0                            REMOVED строка0

Пример 2:
содержимое оригинального файла (file1):
строка1

содержимое "редактированного" файла (file2):
строка1
строка0

результат объединения:
оригинальный    редактированный    общий
file1:          file2:             результат:(lines)
 
строка1         строка1            SAME строка1
                строка0            ADDED строка0

Требования:
  • Класс Solution должен содержать класс LineItem.
  • Класс Solution должен содержать enum Type.
  • Класс Solution должен содержать публичное статическое поле lines типа List<LineItem>, которое сразу проинициализировано.
  • В методе main(String[] args) программа должна считывать пути к файлам с консоли (используй BufferedReader).
  • В методе main(String[] args) BufferedReader для считывания данных с консоли должен быть закрыт.
  • Программа должна считывать содержимое первого и второго файла (используй FileReader).
  • Потоки чтения из файлов (FileReader) должны быть закрыты.
  • Список lines должен содержать объединенную версию строк из файлов, где для каждой строки указана одна из операций ADDED, REMOVED, SAME.
....
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.ArrayList; import java.util.List; /* Отслеживаем изменения */ public class Solution { public static List<LineItem> lines = new ArrayList<LineItem>(); public static void main(String[] args) throws IOException { try( BufferedReader reader = new BufferedReader( new InputStreamReader(System.in)); BufferedReader reader1 = new BufferedReader(new FileReader(reader.readLine())); BufferedReader reader2 = new BufferedReader(new FileReader(reader.readLine()));) { while (reader1.ready()) { String firstFile = reader1.readLine(); String seccondFile = reader2.readLine(); lines.add(getLineItem(firstFile, seccondFile)); } }catch (IOException e){ } } static LineItem getLineItem(String original, String changed){ if (original.equals(changed))return new LineItem(Type.SAME, original); else if (original.isEmpty())return new LineItem(Type.ADDED, changed); else if (changed.isEmpty()) return new LineItem(Type.REMOVED,original); return null; } 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; } } }
0
Комментарии (4)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергеев Виктор
Уровень 40
Master
9 марта 2018, 13:00
"Подскажите что не так?" Вы не запускали и не проверяли свой код.
0
Алексей
Уровень 19
9 марта 2018, 15:15
public class Solution {
    public static List<LineItem> lines = new ArrayList<LineItem>();

    public static void main(String[] args) throws IOException {
      try(  BufferedReader reader = new BufferedReader( new InputStreamReader(System.in));
            BufferedReader reader1 = new BufferedReader(new FileReader(reader.readLine()));
            BufferedReader reader2 = new BufferedReader(new FileReader(reader.readLine()));) {
          while (reader1.ready() && reader2.ready()) {
              String firstFile = reader1.readLine();
              String seccondFile = reader2.readLine();
              lines.add(getLineItem(firstFile, seccondFile));
          }
          for (LineItem lineItem : lines) {
              System.out.println(lineItem.type + " " + lineItem.line);
          }

      }catch (IOException e){ }
    }
    static LineItem getLineItem(String original, String changed){
        if (original.equals(changed)) {return new LineItem(Type.SAME, original); }
        else { if (original.trim().isEmpty())return  new LineItem(Type.ADDED, changed);}
        return  new LineItem(Type.REMOVED,original);


    }
    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;
        }
    }
}
Нашёл несколько ошибок дальше не могу понять в чём проблема
0
Сергеев Виктор
Уровень 40
Master
9 марта 2018, 16:26
теперь запустите свой код на примере из задания
0
Алексей
Уровень 19
9 марта 2018, 17:24решение
Переделал всё по другому неправильно понял условие. Спасибо за помощь.
+4
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush