-4

このNullPointerExceptionが発生します:

java.lang.NullPointerException
    at ATM.isItValid(ATM.java:64)
    at ATM.displayGreeting(ATM.java:59)
    at Bank.runATM(Bank.java:90)
    at Bank.displayBank(Bank.java:109)
    at Bank.addAccount(Bank.java:52)
    at Bank.displayBank(Bank.java:105)
    at Bank.addAccount(Bank.java:52)
    at Bank.displayBank(Bank.java:105)
    at BankDriver.main(BankDriver.java:6)

このコードから:

public void displayGreeting() {
    clearScreen();
    System.out.println("Welcome to Bob's Friendly Bank\n");
    do {
        System.out.print("Enter card number: ");
        currentCard = input.next();
        System.out.print("Enter PIN: ");
        currentPIN = input.next();
        System.out.println(currentCard + currentPIN);
    } while (!(isItValid()));
}
public boolean isItValid(){  
   boolean answer = false;
   if(theBank.validCard(currentCard, currentPIN))      //Exception thrown here.
       answer = true;
   return answer;    
}

なにが問題ですか?

4

5 に答える 5

3

ATM.theBank が設定されることはないため、isItValid でアクセスするとヌル ポインター例外が生成されます。

于 2013-02-11T21:27:09.917 に答える
2

validCard メソッドを呼び出すと、theBank には null があります。インスタンス化する前に使用することはできません。

于 2013-02-11T21:25:28.223 に答える
0

theBankにnullATMです。これを初期化する方法は次のとおりです。

public Bank() {    
    theATM      = new ATM( this);
...


public class ATM {
   ...
   public ATM( Bank bank ) {
      theBank = bank;
      input = new Scanner(System.in);
      currentCard = "";
      currentPIN = "";
   }
于 2013-02-11T21:32:31.310 に答える
0

theBank初期化されていません。

静的オブジェクトの場合new()はクラスレベルで実行し、そうでない場合はメソッドで実行します。メソッドに入るときに使用可能にする必要があるものである場合は、パラメーターとして渡します。

ボーナス:常にnullチェックを行います。

if(null!=theBank && theBank.validCard(currentCard, currentPIN)) 
于 2013-02-11T21:54:21.020 に答える
0

theBankATMクラスの変数が初期化されていません。おそらくいくつかのコードがありませんか?

于 2013-02-11T21:29:30.870 に答える