Для этого кода я должен прочитать в файле и сделать его в ArrayList
. Я продолжаю получать половину своего ArrayList
, а другая половина появляется как то, что я объявлял переменной.Как прекратить получать null на моем массивеList
Код должен быть запущен через другой класс, который расширен.
public static void inputDoctorRecords(ArrayList<Person> doc) throws FileNotFoundException {
//opening file
Scanner console = new Scanner(new File("Doctor.dat"));
Doctor dr;
String lastName = null;
String firstName = null;
String Street = null;
String City = null;
String State = null;
String Zip = null;
int Ident = 0;
String loc = null;
double sal = 0.0;
String Spec = null;
boolean done = true;
boolean fin = true;
String sys = null;
while(console.hasNext()){
String names = console.next();
dr = new Doctor(lastName, firstName, Street,State, City, Zip, Ident, loc, sal, Spec);
if (names.equals("LName")){
lastName = console.next();
}
if(names.equals("FName")){
firstName = console.next();
}
if (names.equals("Street")){
Street = console.nextLine();
}
if (names.equals("City")){
City = console.nextLine();
}
if (names.equals("State")){
State = console.next();
}
if (names.equals("Zip")){
Zip = console.next();
}
if (names.equals("Ident")){
Ident = console.nextInt();
}
if (names.equals("Loc")){ //returns null
loc = console.next();
}
if (names.equals("Salary")){ // returns 0.0
sal = console.nextDouble();
}
if (names.equals("Spec")){ // returns null
Spec = console.next();
}
if (names.equals("next")){ // goes to the next person in file
doc.remove(dr);
doc.add(dr);
}
}
dr = new Doctor(lastName, firstName, Street,State, City, Zip, Ident, loc, sal, Spec);
doc.remove(dr);
doc.add(dr);
System.out.println(doc);
}
// here is the input file
LName Builder
FName Robert
DOByy 1985
DOBmm 12
DOBdd 31
Ident 123456
Loc Seattle
Spec Cardiology
Salary 100000.0
Street 123 Mockingjay
City Sector 12
State WA
Zip 98058
next
LName Builder
FName Roberta
DOByy 1988
DOBmm 11
DOBdd 22
Ident 234567
Loc Fife
Spec Oncology
Salary 120000.0
Street 123 Mockingjay
City Sector 12
State WA
Zip 98058
next
LName Klein
DOByy 1974
DOBdd 06
Loc Tacoma
Street 59 West Rodeo Drive
Ident 345678
City Hollywood
DOBmm 05
State CA
FName Calvin
Zip 90210
Spec Dermatology
Salary 150000.0
eof
вы не показать, где вы заявляете и инициализировать список, так что мое предположение ... инициализировать его. также: повысите эффективность кода. , если у вас есть это: if (names.equals («Зарплата»)) { sal = console.nextDouble(); } if (names.equals («Spec»)) {Spec = console.next(); } замените его на: if (names.equals («Зарплата»)) {sal = console.nextDouble(); } else if (names.equals («Spec»)) {Spec = console.next();} , так как невозможно, чтобы оба они были истинными. Кроме того, проверьте, что делают эти методы, если вы не понимаете результаты. – Stultuske
Просьба также предоставить примерный входной файл, который может помочь лучше понять проблему ... – siegi
Проблема заключается в том, что вы должны проверять перед каждым следующим, если 'hasNext'. Это означает, что вы должны изменить все свои 'if' с помощью' switch' или 'if' /' else' – CrApHeR