У меня проблема. Итак, у меня есть текстовый файл с некоторыми данными. У меня есть класс 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 Я пробовал использовать if (a < pm.getMedicalCard() && b > pm.getMedicalCard()), но он не работает
Решением было бы использовать Класс диапазона, если использование внешней библиотеки является вариантом, и я не уверен, что полностью понимаю требование, но я думаю, что цикл из метода readInRange необходимо изменить, так как в настоящее время читается от строки 0 до строки b - а
@ValentinCarnu Я пробовал этот if (range.contains(pm.getMedicalCard())), но всегда получаю исключение NullPointerException.
Вы должны опубликовать то, что пробовали. Если вы ищете записи внутри диапазона, я вижу две потенциальные проблемы. Во-первых, я не могу сказать, преобразовываете ли вы поля medicalCard в какое-то число после прочтения записи. Ваш оператор if, вероятно, не делает того, что вы думаете. Настоящая проблема заключается в том, что вы, вероятно, сравниваете строки, поэтому ваш оператор if вообще не работает, но вы не опубликовали достаточно информации о классе, чтобы сказать. Вы также должны изменить свои переменные, чтобы они были более наглядными, это низкий диапазон или высокий диапазон. Измените a и b на что-то вроде низкого и высокого.
@Lado Мне немного непонятно. Я предполагаю, что метод readInRange должен читать из файла test.txt диапазон строк, определенных медицинской картой. Верно ли мое предположение?
@ValentinCarnu, да, ты прав.
@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) являются лишь примерами




Спасибо всем, кто пытался мне помочь. Вот как я решил эту проблему
Мой код:
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. Чего-то не хватает либо в описании проблемы, либо в решении
Звучит как домашнее задание, а предоставленный вами код не имеет ничего общего с описанной вами проблемой.