我有几个类,第一个名为“Account”的是添加到数组中的对象,“Account”类有一个名为“printAccountDetails”的方法,它将打印出帐户的详细信息。我正在使用的第二个类称为“AccountCollection”,它是数组类,我一直在尝试创建一个方法,打印出已添加到数组中的所有帐户对象的详细信息。
到目前为止我最接近的是这种方法:
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");
}
“accounts”是数组的名称,“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");
}
只是导致空指针异常,因为当前索引为空。任何帮助表示赞赏!
答案 0 :(得分:0)
正如已经指出的那样,你需要在循环中使用index
,因为currentIndex
的值永远不会改变,因此你会一遍又一遍地看到同样的东西。
假设异常发生在上面的代码而不是printAccountDetails()
内(堆栈跟踪在这里会有帮助),你遇到的问题是你的数组中的一个元素是null而你&# 39;重新尝试在其上调用printAccountDetails()
。
如果没有看到其余的代码,我就必须猜测,但我假设currentIndex
在您添加项目时会增加。
所以说你添加一个项目,然后你有currentIndex==1
,你的第一个循环将打印出第一个项目accounts[currentIndex -1]
=&gt;重复accounts[0]
- 对阵列中的每个元素一次。您的第二个循环将立即抛出NullPointerException
,因为accounts[1]
为null
。
如果您更改为使用index
,则会在index
到达currentIndex
后(即我的示例中为1
)抛出异常。
所以答案(如果我的假设是正确的)不是在循环条件中使用数组的长度,而是使用currentIndex
:
for (int index = 0 ; index < currentIndex ; index++)
{
accounts[index].printAccountDetails();
}