2015-01-31 4 views
-1

Я посмотрел на пару других ступеней, и я все еще не мог понять, где я ошибся. Я пытаюсь создать массив объектов учетной записи и сканировать из текстового файла, чтобы заполнить его. Спасибо за любую помощь или указание направления.Не могу понять, почему я получаю java.lang.NullPointerExceptio

import java.util.*; 
import java.io.*; 


public class Bank { 

    private static Account[] accounts = new Account[10]; 
    private static int numAccounts = 0; 

    public static void main(String[] args) throws Exception { 
     Scanner fileScan = new Scanner(new File("bankdata.txt")); 

     for(int i=0; i<accounts.length;i++){ 
      accounts[i] = new Account(null, i, i); //(client, balance, accountNum) 
     } 

     while(fileScan.hasNext()){ 
      accounts[numAccounts].getClient().setFName(fileScan.next()); 
      accounts[numAccounts].getClient().setLName(fileScan.next()); 
      accounts[numAccounts].getClient().setAge(fileScan.nextInt()); 
      accounts[numAccounts].getClient().setPhoneNum(fileScan.nextInt()); 
      accounts[numAccounts].setBalance(fileScan.nextDouble()); 
      accounts[numAccounts].setAccountNum(fileScan.nextInt()); 

      numAccounts++; 
      System.out.println(accounts[numAccounts]); 
     } 
     fileScan.close(); 
    } 
} 
+1

Если вы смотрели на довольно много ** ** любая предыдущая нить на эту тему, то вы знаете, что самый важный бит информации, информация, что ваш вопрос не хватает. Давай, какой номер строки выбрасывает NPE? –

+0

Можете ли вы поделиться своим стеклом? – Mureinik

+0

Извините, что я отвратился, когда я пробовал что-то вроде строки 18. – Espinal

ответ

1

Глядя на то, как вы инициализировать объекты учетной записи, все ваши клиенты являются недействительными:

accounts[i] = new Account(null, i, i); //(client, balance, accountNum) 

Тогда при попытке использовать клиент переменные,

accounts[numAccounts].getClient().setFName(fileScan.next()); 

вы получите NPE брошен.

Решение: не используйте нулевые клиенты. Создайте свой клиент в то время цикла:

while(fileScan.hasNext()){ 
    String fName = fileScan.next(); 
    String lName = fileScan.next(); 
    int age = fileScan.nextInt(); 
    String phoneNumber = fileScan.next(); 

    Client client = new Client(....); //use info above 

    accounts[numAccounts].setClient(client); 
    accounts[numAccounts].setBalance(fileScan.nextDouble()); 
    accounts[numAccounts].setAccountNum(fileScan.nextInt()); 

    numAccounts++; 
    System.out.println(accounts[numAccounts]); 
} 
+0

. Имеет смысл проблема, с которой я столкнулся, когда пытаюсь не сделать ее нулевой, состоит в том, что клиент состоит из 2 строк и 2 int, поэтому, когда я пытаюсь дать клиенту value Мне сказали, что конструктор не определен. Edit: Я просто посмотрел на код, который вы мне дали. Я попробую его поблагодарить. – Espinal

+0

@ Эспиналь: затем используйте конструктор, который имеет смысл. Только у вас есть весь код, поэтому вам нужно это выяснить. Обратите внимание, что номер телефона должен ** никогда не быть int. Это должна быть строка. –

+0

Alrighty Я позаботился об этом int. Я буду следить за этим с благодарностью. – Espinal

1

Вам Ваш сам клиент установки, как нуль, а затем вызвать функцию на нулевой ссылке именно поэтому вы получаете NPE

accounts[i] = new Account(null, i, i); //(client, balance, accountNum) 

Вызов методы на нулевая ссылка или попытка получить доступ к полю нулевой ссылки вызовет NPE.

Пример:

public class Test 
{ 
    public static void main(String[] args) 
    { 
     Object obj = null; 
     obj.toString(); //cause Null Pointer Exception 
    } 
}