2017-02-04 2 views
-3

のうち、このエラー配列のインデックスを取得していますそれはコンパイルが、あなたのmonthlyFee方法は、この行にIndexOutOfBoundsExceptionをスローしますは、なぜ私は文句を言わないそれを解析し、この現在のコードで</p> <p>をintにずさんな変換、二重のためのエラーなしでコンパイルこれは、これまでと(int型)なしで私のクラスのためのコードである境界

public class Bank { 


    // instance variables========================================= 
    // setup new array of BankAccount objects and internal null constructor 
    BankAccount [] custAcct = new BankAccount[10]; 

    // data above here 
    //=========================================================== 
    // methods down below 

    // display methods======================================= 

    public void printAccounts(){ 
     for(int i=0; i<custAcct.length; i++) { 
      if (custAcct[i]!=null){ 
       System.out.println(custAcct[i]); 
      } 
     } //end loop 

    } // end method 

    // utility methods============================= 

    public void addAccount(BankAccount acct) { 
     for(int i=0; i<custAcct.length; i++) { 
      if (custAcct[i]==null){ 
       custAcct[i] = acct; 
       break; 
      } 
     } // end loop 

    } // end method 

    public BankAccount getAccount(int acc) { 
     return custAcct[acc]; 
    } // end method 

    public void monthlyFee (double acctVal){ 
     for(int i=0; i<custAcct.length-1; i++) { 
      if (custAcct[i]!=null){ 
       custAcct[i] = custAcct[(int)acctVal]; 
       break; 
      } 
     } // end loop 

    } // end method 
+1

これは 'getAccount'または' monthlyFee'を呼び出す方法と関係がありますが、どのように呼び出しているのかわかりません。 – ajb

+0

int errors = 0; 二重料金= -2.95; System.out.println( "\ n銀行1を作成"); 銀行銀行1 =新規銀行(); System.out.println( "\ n 1つのアカウント"); BankAccount b1 = new BankAccount( "Joe Mac"、1234); b1.adjust(1000.0); bank1.addAccount(b1); bank1.printAccounts(); bank1.printAccounts(); System.out.println( "\ n月額料金"); bank1.monthly料金(手数料); bank1.printAccounts(); System.out.println( "\ nErrors:"); –

+0

'custAcct [(int)acctVal]'は正しくないようです。残高が100ポンドの場合、これはあなたの範囲外のcustAcc [100]になります。 –

答えて

0

monthlyFee方法で例外エラーなしで実行されません。

custAcct[i] = custAcct[(int)acctVal]; 

acctValの長さがcustAcct(この場合は10)よりも大きいか、0より小さい場合。質問に投稿したコメントから、monthlyFeeと-2.95を呼び出していることがわかります。これはIndexOutOfBoundsExceptionのソースです。

あなたaddAccount方法は、あまりにも、設計上の欠陥が含まれる場合があります。それは、現在コーディングされている方法は、それはそれは、引数として渡されたBankAccountcustAcct配列内の空のスポットの全てを満たします。あなただけ最初空の位置にアカウントを追加したい場合は、この使用します。私は、これはここから来てする必要があります考えています

public void addAccount(BackAccount acct) { 
    for(int i = 0; i < custAcct.length; i++) { 
     if(custAcct[i] == null) { 
      custAcct[i] = acct; 
      return; 
     } 
    } 
} 
+0

それは私が参照してください公衆void monthlyFee(ダブルacctVal) –

+0

を持っているプロジェクトの要件です。答えを編集する。 – MikaelF

0

を(おそらくスタックトレースのスニペットを送信するのに役立ちます)

  custAcct[i] = custAcct[(int)acctVal]; 

値が0より小さいか、またはcustAcct.lengthより大きい場合、acctValに渡される値は、Out of bound例外が発生する可能性があります。他の問題は、custAcct [i]が初期化されておらず、ヌルポインタ例外が発生する可能性があります。あなたがスタックトレースを与えるなら、より良く伝えることができます。

+0

メソッドmonthlyFeeは、パラメータとしてdouble値をとり、その値をすべてのBankAccountオブジェクトに適用します。 –

+0

この場合、acctValueの追加/削除の意図は、これはcustAcct [i] + =(int)acctValのようにする必要があります。それに応じて、値は各勘定科目内で増減します。 –

+0

//Bank.java:54:エラー:2進演算子 '+'のオペランドタイプが不正です // custAcct [i] + =(int) acctVal; –

関連する問題

 関連する問題