2013-07-17 97 views
-1

我想写一个简单的银行业务程序。java.lang.NullPointerException:无法打印数组内容

的基本功能是:

1. open account - (open <amount>)-- returns account number 
2.check balance - (balance <AccountNumber>) 

用于以下是this.I我不是张贴我的其他类和contatins的main(),因为我相信,问题就出在这个代码某处类的代码: :

public class BankAccount { 
private static int bankAccNoGen=1001; 
private int balance; 
private int bankAccNo; 
private int i=0; 

BankAccount[] bankArray=new BankAccount[10]; 

public void openBankAccount(int openAmount){ 
    BankAccount ba =new BankAccount(); 
    ba.balance=openAmount; 
    ba.bankAccNo=bankAccNoGen; 

    bankArray[i] = ba; 
    System.out.println("Account opened with the account number : "+bankArray[i].bankAccNo); 
    System.out.println("Please note the account number for later use."); 
    System.out.println("Balance for account no : "+bankArray[i].bankAccNo+" is : "+ bankArray[i].balance); 
    ++bankAccNoGen;++i; 

} 
public void printBalance(int accNo){ 


    for(int i=0;i<10;i++){ 
     if(bankArray[i].bankAccNo==accNo){ 
      System.out.println("Account Number :"+ accNo +" currently has :"+bankArray[i].balance); 
     } 
    } 

} 

}

运行此之后,我可以打开一个银行帐号:

open 1000 

输出:

Account opened with the account number : 1001 
Please note the account number for later use. 
Balance for account no : 1001 is : 1000 

I can check balance by : 

balance 1001 

错误:

Exception in thread "main" java.lang.NullPointerException at 
BankAccount.printBalance(BankAccount.java:27) at 
ReadInput.inputRead(ReadInput.java:36)  at 
SimpleBank.main(SimpleBank.java:11) 
+0

BankAccount并不遵循oop!无论如何openBankAccount是一家银行! –

+0

拉胡尔,你需要什么银行数组?这是一种平衡历史吗?因为我不清楚你为什么在银行账户对象中有一组银行账户。 – Jops

回答

0

你只初始化数组(bankarray[i] = ba)的第一个元素,并在打印时您要访问的所有10个元素。由于索引1至9上的数组是null,因此访问bankarray[1]时失败。

初始化所有元素,然后它将工作。

0

NullPointerException是试图在尚未初始化的bankArray访问索引 - 而不是BankAccount的,它包含null。将null作为BankAccount(通过参考bankArray[i].bankAccNo)引发该异常。

要解决这个问题,您需要跟踪哪些索引已经初始化,或者更好,请使用ArrayList

+0

更好的办法是使用[HashMap](http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html),因为他试图使用密钥(帐号)寻找一个帐户。 – ajb

0

更改此:

if(bankArray[i].bankAccNo==accNo){ 

if (bankArray[i] != null && bankArray[i].bankAccNo == accNo) { 
4

你bankArray只包含1种元素[0],所以你得到空指针上的第二次打击,在这一点上:bankArray[i].balance

enter image description here

+1

+1你在哪里得到这些照片?始终如一! – NINCOMPOOP

+1

感谢您的+1。不是图片,我使用Gimp创建它们。 :) – Jops

+1

@TheNewIdiot哇,你的名声如此之高!做得好! 。 – Jops