2012-02-25 6 views
-1

Я пишу приложение, в котором я использую массив внутри класса. Этот массив объявляется глобально за пределами области действия метода, так что все методы объектов будут иметь доступ к данным. Однако, когда я назначаю объект индексу, этот объект доступен только как часть массива в этом конкретном методе. Любой другой метод, пытающийся прочитать этот индекс массива, получает исключение nullpointer.Java-массивы и область применения

Некоторые иллюстрирующим мое использование:

Account[] accounts = new Account[8000]; 


public void addAccount() { 


    cli.printMessage("Welcome to the account add wizard."); 
    String holdername = cli.getInput(entername); 
    int accountnr = Integer.parseInt(cli.getInput(enternr)); 
    BigDecimal accbalance = new BigDecimal(cli.getInput(enterinitialbalance)); 

    accounts[accountnr] = new Account(holdername, accountnr, accbalance); 
    String accountinfo=accounts[accountnr].number + " " + " " + accounts[accountnr].holder + " " + accounts[accountnr].balance; 
    cli.printMessage(accountinfo); 

} 

Добавление учетной записи работает весь путь, это не когда выбежала из одного экземпляра этого класса:

public void getAccountinfo() { 

    int accountnr = Integer.parseInt(cli.getInput(getinfo)); 
    String accountinfo=accounts[accountnr].number + "" + "" + accounts[accountnr].holder + accounts[accountnr].balance; 
    cli.printMessage(accountinfo); 
} 

Является ли это из-за объема или это из-за меня путают переменные экземпляра и класса? Может быть, это совсем другое?

Ошибки я получаю исключение NullPointer в

 String accountinfo=accounts[accountnr].number + "" + "" + accounts[accountnr].holder + accounts[accountnr].balance; 

признателен за любую помощь!

+0

Что вы ожидаете от происходящего и что на самом деле происходит? – Jivings

+4

Это должно быть хорошо - пожалуйста, покажите короткую, но * полную * программу, которая демонстрирует проблему. (Вы также должны рассмотреть возможность использования camelCase для имен переменных.) –

+0

какое значение имеет accountnr в getAccountinfo() –

ответ

1

В getAccountInfo вы позволяете пользовательский ввод число X. Если массив «клетка» в X не был установлен ранее через addAccount, accounts[X] является null и, таким образом, accounts[X].number правильно бомб из.

+0

Вы правы, и я нашел ошибку. Приложение представляет собой приложение cli. Когда пользователь ввел некоторый ввод и завершил свою «задачу», я снова вызвал метод рендеринга меню. Проблема заключалась в том, что класс, в котором был вставлен код i, вставленный (класс управления учетной записью), был внедрен внутри этого метода. Таким образом, создается новый объект управления учетной записью для каждой задачи. Перемещение его к глобальному объекту внутри этого класса заставило все это работать. – nenne

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