Intellij IDEA не читает данные через BufferedReader

Здравствуйте!

Не получается выполнить некоторые задачи в Intellij IDEA, так как программа не может прочитать данные с клавиатуры. Любой код с запуском BufferedReader приводит к тому, что программа компилируется, но зависает. С другими командами проблем нет, с самим кодом — тоже (на сайте тот же код срабатывает).

Также reader.ready() возвращает значение false, хотя на сайте оно по умолчанию true. Возможно, это и есть причина.

Как это можно исправить?
  • ,

level19.lesson10.bonus01 какие функции должна выполнять программа?

Что вообще требуется в задаче. Написал код, который вроде выполняет все, что требуется. Чего не хватает?
package com.javarush.test.level19.lesson10.bonus01;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
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
строка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 IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader reader1 = new BufferedReader(new FileReader(reader.readLine()));
        BufferedReader reader2 = new BufferedReader(new FileReader(reader.readLine()));
        reader.close();
        List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();
        //заполнение массивов
        while (reader1.ready())
        {
            list1.add(reader1.readLine());
        }
        while (reader2.ready())
        {
            list2.add(reader2.readLine());
        }
        //проверка на наличие тех или иных строк в файла
        for (int i = 0; i < list1.size(); i++)
        {
            if (list1.get(i).equals(list2.get(i)))
            {
                lines.add(new LineItem(Type.SAME, list1.get(i)));
            } else if (list1.get(i).isEmpty())
            {
                lines.add(new LineItem(Type.ADDED, list2.get(i)));
            } else if (list2.get(i).isEmpty())
            {
                lines.add(new LineItem(Type.REMOVED, list1.get(i)));
            }
        }
        reader1.close();
        reader2.close();
        
        //проверка заполняемости списка (удалить при сдаче задания)
        for (int i = 0; i < lines.size(); i++)
        {
            System.out.println(lines.get(i).type + lines.get(i).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;
        }
    }
}
  • ,

package com.javarush.test.level19.lesson05.task02;

Здравствуйте, знаю что простенькая задачка но не могу понять почему не принимает, подскажите пожалуйста. Проверяю на: world world world? world! world. World
Вывод: 6
package com.javarush.test.level19.lesson05.task02;

/* Считаем слово
Считать с консоли имя файла.
Вывести в консоль количество слов "world", которые встречаются в файле.
Закрыть поток ввода.
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader reader1 = new BufferedReader(new FileReader(reader.readLine()));


        String stroka = "";
        while(reader1.ready())
        {
            stroka = reader1.readLine();
            String stroka2 = stroka.replace("?", "").replace("!", "").replace(".", "").replace(",", "");
            String[] array = stroka2.toLowerCase().split(" ");
            int count = 0;
            for (int i = 0; i < array.length; i++)
            {

                try{
                   if (array[i].equals("world")){

                       count++;
                   }


                } catch (Exception e) {}
            }
            System.out.println(count);

        }
        reader.close();
        reader1.close();

    }
}
  • ,

level19.lesson05.task03

Здравствуйте!

Решая данную задачу, назрел вопрос. Собственно суть его проста, как лучше решать задачи? Строго по лекциям вникая в суть задачи и используя самые простые методы для понимания работы в целом или же как умеем/нагуглили/прочитали в книжке даже если это коряво и костыль по сути дела?

Приведу пример. В данной задаче нужно:

/* Выделяем числа
Считать с консоли 2 имени файла.
Вывести во второй файл все числа, которые есть в первом файле.
Числа выводить через пробел.
Закрыть потоки ввода-вывода.

Пример тела файла:
12 text var2 14 8v 1

Результат:
12 14 1
*/


Так вот, я сделал это просто. Использую BufferedReader считывал строки с файла, делал split по пробелу, и тогда в отдельной функции проверял, являеться ли строка в массиве числовой или нет. Если нет то ничего не делал, если да то писал в файл добавляя пробел. Тестирование прошло, но… правильно ли я подошел к задаче?

Может надо было использовать ТОЛЬКО FileReader/FileWriter и только метод .read()/.write() для решения, как нам показывали в лекциях? Считывая побайтово с файла и каким то образом проверяя находу или в массиве отдельно символы?