2012-03-24 6 views
-1
  1. メンバーを非アクティブ状態で比較して印刷しようとしています。問題は、配列を検索して各要素の状態をチェックしないということです。最初の要素のステータスが「アクティブ」の場合は、エラーメッセージが出力され、他の要素のチェックは続行されません。
  2. 最初の要素の状態は、それが印刷される「非アクティブ」であるが、このような出力前に例外をスローする場合: GymAss.MemberTestのスレッド「メイン」のjava.lang.NullPointerExceptionでメンバーを非アクティブ状態で比較して印刷しようとしています。

    例外1名前:1日:1つの状態:不活性型:1どれ ヘルプは大いにだろう GymAss.MemberTest.main(MemberTest.java:58)

  3. 口座番号で.AllInactive(MemberTest.java:293)感謝!以下のコード:

....

public static void AllInactive() 

    { 
    int check=0; 
    do 

     { 
     if (accounts[check] instanceof Student && accounts[check].getStatus().equals("INACTIVE"))     
     { 


      System.out.printf("\nAccount Number: %d \nName: %s \nDate: %d \nStatus: %s \nType: %s \n" , accounts[check].getIdNumber(),accounts[check].getName(),accounts[check].getDateJoined(),accounts[check].getStatus(),accounts[check].getMemberType()); 
      check++; 

     } 
     else if (accounts[check] instanceof Adult && accounts[check].getStatus().equals("INACTIVE")) 
      { 


       System.out.printf("\nAccount Number: %d \nName: %s \nDate: %s \nStatus: %s \nType: %s \n" , accounts[check].getIdNumber(),accounts[check].getName(),accounts[check].getDateJoined(),accounts[check].getStatus(),accounts[check].getMemberType()); 
       System.out.print("\n"); 
       check++; 


      } 
     else 
     { 
     System.out.println("**Account Does Not Exist**"); 
     } 

     } while (accounts[check].getStatus().equals("INACTIVE")); 

} 
+0

どの行が293ですか?あなたはデバッガに歩み寄り、この行のどの変数が 'ヌル 'であるかを確認します。 – amit

+0

なぜ同じ条件を2回おこなっているのですか? –

+0

私はもともとwhile(accounts [check]!= null)でしたので同じ条件を2回使用します。私は迷惑だったエラーステートメントを無限ループにします。 – jibbajava

答えて

0

ただ、私たちは同じことを話していることを確認するには:私の知る限り、あなたが個人のアカウントを含む配列を持って理解されるように。あなたがしたいことは、現在活動していないすべてのアカウントを取得することです。

なぜあなたはアクティブなアカウントを見つけたらループを止めますか?アクティブではないアカウントとそれに続くアクティブでないアカウントがある場合、while(accounts[check].getStatus().equals("INACTIVE"))の条件はfalseであるため、ループはアクティブなアカウントで停止します。配列全体をチェックして、配列全体をループする必要があります。これは、これはすべてのアカウントをチェックし、あなたが配列の末尾に達した場合に停止

for(int check=0; check<accounts.length; check++)

で行うことができます。さらに簡単な方法があります。私は "java foreach"を探すことをお勧めします。

あなたのNullPointerExceptionの原因は、おそらくあなたの配列の終わりに達しているかどうかをチェックしていません。あなたはあなたのアレイと他には何もで唯一の非アクティブStudentアカウントを持っていると仮定しましょう、あなたのコードは、これを行います。

  • check = 0;
  • accounts[0]Studentあり、それは非アクティブですか? - はい
    • プリントもの
    • check = 1
  • else
  • をスキップelse if
  • をスキップaccounts[1]アクティブになって? >NullPointerException

試行錯誤がこれらのヒントでそれを修正しようので、学習の素晴らしい方法があるので、私はあなたに完全なコードを与えたくない - 待って、何accounts[1]ありません。あなたが何らかの問題に遭遇した場合でも、思考の後でも解決できない場合は、戻ってください。

+0

ご協力いただきありがとうございます。私は最後に完璧に働いています。私はそれぞれを使いましたが、もっと簡単に見つけました。基本的には、私が遅れていたメッセージを印刷するのではなく、次の要素に移動したいときに、elseステートメントをインクリメントするだけでした。助けてくれてありがとう! – jibbajava

関連する問題