Диапазон в файловой Java

У меня проблема. Итак, у меня есть текстовый файл с некоторыми данными. У меня есть класс PatientView с методом readInRange(PatientModel pm, Integer a, Integer b) и этот класс PatientModel с методами получения и один частный метод writeToFile(), и у меня проблема с этим методом readInRange, потому что я не знаю, как выводить информацию между двумя числами (этот диапазон должен работать с полем mediacalCard ). Итак, что мне делать, чтобы отобразить диапазон с помощью поля mediacalCard? Должен ли я сделать этот mediacalCard массивом? Помогите, пожалуйста.

Это мой код:

Класс PatientView:

public void readInRange(PatientModel pm, Integer a, Integer b) {
    try {
        String str;
        BufferedReader bufferedReader = new BufferedReader(new FileReader("test.txt"));
        for (int i = a; i < b+1; i++) {
            while ((str = bufferedReader.readLine()) != null) {
                System.out.println(str);
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Класс PatientModel и его методы получения и метод записи в файл:

public Integer getId() {
    return Id;
}

public String getFirstName() {
    return firstName;
}

public String getLastName() {
    return lastName;
}

public String getPatronymic() {
    return patronymic;
}

public String getAddress() {
    return Address;
}

public Integer getNumberPhone() {
    return numberPhone;
}

public Integer getMedicalCard() {
    return medicalCard;
}

public String getDiagnose() {
    return diagnose;
}

private void writeToFile() {
    try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("test.txt", true))) {
        bufferedWriter.write(String.format("%1d, %10s, %10s, %10s, %10s, %10d, %10d, %10s", Id, firstName,
                lastName, patronymic, Address, numberPhone, medicalCard, diagnose));
        bufferedWriter.newLine();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Звучит как домашнее задание, а предоставленный вами код не имеет ничего общего с описанной вами проблемой.

Lothar 03.11.2018 11:26

@Lothar Я пробовал использовать if (a < pm.getMedicalCard() && b > pm.getMedicalCard()), но он не работает

Lado 03.11.2018 11:30

Решением было бы использовать Класс диапазона, если использование внешней библиотеки является вариантом, и я не уверен, что полностью понимаю требование, но я думаю, что цикл из метода readInRange необходимо изменить, так как в настоящее время читается от строки 0 до строки b - а

user10386912 03.11.2018 11:44

@ValentinCarnu Я пробовал этот if (range.contains(pm.getMedicalCard())), но всегда получаю исключение NullPointerException.

Lado 03.11.2018 11:45

Вы должны опубликовать то, что пробовали. Если вы ищете записи внутри диапазона, я вижу две потенциальные проблемы. Во-первых, я не могу сказать, преобразовываете ли вы поля medicalCard в какое-то число после прочтения записи. Ваш оператор if, вероятно, не делает того, что вы думаете. Настоящая проблема заключается в том, что вы, вероятно, сравниваете строки, поэтому ваш оператор if вообще не работает, но вы не опубликовали достаточно информации о классе, чтобы сказать. Вы также должны изменить свои переменные, чтобы они были более наглядными, это низкий диапазон или высокий диапазон. Измените a и b на что-то вроде низкого и высокого.

Mike 03.11.2018 11:51

@Lado Мне немного непонятно. Я предполагаю, что метод readInRange должен читать из файла test.txt диапазон строк, определенных медицинской картой. Верно ли мое предположение?

user10386912 03.11.2018 11:52

@ValentinCarnu, да, ты прав.

Lado 03.11.2018 11:54

@Lado хорошо, тогда в PatienModelmedicalCard должен быть диапазоном, а не целым числом, и тогда должно быть что-то вроде этого PatienModel pm = new PatienModel(); pm.setMedicalCard(Range.between(10, 21)); перед вызовом метода readInRange. Метод readInRange должен закольцовываться между pm.getMedicalCard().getMinimum() и pm.getMedicalCard().getMaximum(). Тем не менее, цикл внутри метода readInRange необходимо изменить, поскольку в настоящее время считываются не строки в диапазоне, а строки от 0 до максимума - минимума. P.S. значения диапазона (10 и 21) являются лишь примерами

user10386912 03.11.2018 12:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
491
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо всем, кто пытался мне помочь. Вот как я решил эту проблему

Мой код:

public void readInRange(PatientModel pm, Integer low, Integer high) {
    String[] splitdata;
    String sixcol; Integer num=0;
    try {
        String str;
        BufferedReader bufferedReader = new BufferedReader(new FileReader("test.txt"));
        while ((str = bufferedReader.readLine()) != null) {
            splitdata = str.split("[,\t]");
            sixcol = splitdata[0];
            Integer aa = num.valueOf(sixcol);
            if (aa > low && aa < high) {
                System.out.println(str);
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

параметр PatientModel pm не используется, метод считывает из файла test.txt все строки и выводит только строки из диапазона, определенного параметрами а и б, независимо от значения свойства medicalCard параметра pm. Чего-то не хватает либо в описании проблемы, либо в решении

user10386912 08.11.2018 01:12

Другие вопросы по теме