2015-04-12 8 views
0

Для этого кода я должен прочитать в файле и сделать его в 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 
+0

вы не показать, где вы заявляете и инициализировать список, так что мое предположение ... инициализировать его. также: повысите эффективность кода. , если у вас есть это: 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

+0

Просьба также предоставить примерный входной файл, который может помочь лучше понять проблему ... – siegi

+0

Проблема заключается в том, что вы должны проверять перед каждым следующим, если 'hasNext'. Это означает, что вы должны изменить все свои 'if' с помощью' switch' или 'if' /' else' – CrApHeR

ответ

0

Сканер считывает InputStreams построчно, когда вы говорите, например Zip = console.next();, он отбрасывает все, что получил от текущей строки. Я рекомендую разбивать String с помощью String # split().

EDIT: Сканер # next() потребляет строку. Это то слово, которое я искал.

+0

Если это ответили на ваш вопрос, пожалуйста, примите ответ. Если нет, обновите свой вопрос. – Distjubo

0

Попробуйте с этим

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(); 

     if (names.equals("LName")) { 
      lastName = console.next(); 
     } 
     else if(names.equals("FName")) { 
      firstName = console.next(); 
     } 
     else if (names.equals("Street")) { 
      Street = console.nextLine();  
     } 
     else if (names.equals("City")) { 
      City = console.nextLine(); 
     } 
     else if (names.equals("State")) { 
      State = console.next(); 
     } 
     else if (names.equals("Zip")) { 
      Zip = console.next(); 
     } 
     else if (names.equals("Ident")) { 
      Ident = console.nextInt();    
     } 
     else if (names.equals("Loc")) { 
      loc = console.next(); 
     } 
     else if (names.equals("Salary")) { 
      sal = console.nextDouble(); 
     } 
     else if (names.equals("Spec")) { 
      Spec = console.next(); 
     } 
     else if (names.equals("next")) { // goes to the next person in file 
      dr = new Doctor(lastName, firstName, Street,State, City, Zip, Ident, loc, sal, Spec); 
      doc.add(dr);  
     } 
     else { 
      console.nextLine(); // ignore the line because it is unknown 
     } 
    } 
    // Last Line 
    dr = new Doctor(lastName, firstName, Street,State, City, Zip, Ident, loc, sal, Spec);  
    doc.add(dr); 
    System.out.println(doc); 
} 

Надеется, что это помогает

+0

спасибо! но я получаю ошибку: Исключение в потоке «main» java.util.NoSuchElementException: не найдено ни одной строки \t на java.util.Scanner.nextLine (Scanner.java:1540) \t at Clinic.inputDoctorRecords (Clinic.java:185)) \t at Clinic.main (Clinic.java:34) – thatsnifty

+1

У меня нет всего вашего кода, чтобы узнать, какая конкретная строка вызывает это исключение. Вы знаете, какая строка вызывает исключение? Попробуйте удалить 'else { console.nextLine(); } ' – CrApHeR

Смежные вопросы