2014-12-05 3 views
-1

У меня есть несколько классов, первый из которых называется «Учетная запись» - это объекты, которые добавляются в массив, класс «Учетная запись» имеет метод «printAccountDetails», который будет распечатайте сведения об учетной записи. Второй класс, который я использую, называется «AccountCollection», который является классом массива, и я пытался создать метод, который будет распечатывать сведения обо всех объектах учетной записи, которые были добавлены в массив.Как распечатать объекты в массиве (Java)

Ближайший я получил до сих пор этот метод:

public void printAllAccounts() 

{ 
    if (accounts.length > 0) 
    { 
     for (int index = 0 ; index < accounts.length ; index++) 
     { 
      accounts[currentIndex -1].printAccountDetails(); 
     } 
    } 

    else 

    { 
     System.out.println ("No entries"); 
    } 

«счета» является именем массива, и «currentIndex» является точкой в ​​массиве. Это работает для распечатки деталей, однако оно многократно выводит данные учетной записи, что, вероятно, связано с тем, что я сказал ему постоянно увеличиваться на один, а затем вернуться к 1. Но я не могу думать о другом способе делать в этом примере:

public void printAllAccounts() 

{ 
    if (accounts.length > 0) 
    { 
     for (int index = 0 ; index < accounts.length ; index++) 
     { 
      accounts[currentIndex].printAccountDetails(); 
     } 
    } 

    else 

    { 
     System.out.println ("No entries"); 
    } 

Просто приводит к исключению нулевого указателя, поскольку текущий индекс пуст. Любая помощь приветствуется!

+3

Используйте 'index' вместо' currentIndex', так как это ваша переменная счетчика внутри цикла. Где вы определили 'currentIndex'? –

+0

В конструкторе: public AccountCollection (int maxNoOfAccounts) { accounts = new Account [maxNoOfAccounts]; currentIndex = 0; } добавление индекса по-прежнему дает исключение из null-указателя:/после распечатки учетных записей, хотя! – Patterrz

ответ

0

Как уже указывалось, вы должны использовать index внутри цикла, так как значение currentIndex никогда не изменится там, следовательно, вы будете видеть одно и то же снова и снова.

Предполагая, что исключение происходит в коде выше, а не внутри printAccountDetails() (трассировки стека бы помочь здесь), проблема у Вас есть то, что один из элементов вашего массива является пустым, и вы пытаетесь вызвать printAccountDetails() в теме.

Не видя остальной части вашего кода, я должен угадать, но я предполагаю, что при добавлении элемента увеличивается currentIndex.

Так вы добавили один пункт, то у вас есть currentIndex==1 и ваш первый цикл будет печатать пункт accounts[currentIndex -1] =>accounts[0]первого неоднократно - один раз для каждого элемента в массиве. Ваша вторая петля немедленно выбросит NullPointerException, потому что accounts[1] - null.

При изменении в использовании index он будет бросать исключение один раз index достигает currentIndex (т.е. 1 в моем примере).

Таким образом, ответ (если мои предположения верны) не использовать длину массива в условии цикла, но вместо того, чтобы использовать currentIndex:

for (int index = 0 ; index < currentIndex ; index++) 
    { 
     accounts[index].printAccountDetails(); 
    } 
Смежные вопросы