为什么我将此错误数组索引超出范围

时间:2017-02-04 06:26:15

标签: java

这是我的类到目前为止的代码,没有(int)解析它不会编译而没有错误的sloppy转换double到int

使用当前代码,它将编译但不会在monthFee方法

中没有异常错误的情况下运行
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

2 个答案:

答案 0 :(得分:0)

您的monthlyFee方法会在此行上抛出IndexOutOfBoundsException

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

如果acctVal高于custAcct的长度(在这种情况下为10)或低于0.从您发布到问题的评论中,我看到您正在调用{{ 1}}使用-2.95,这是monthlyFee

的来源

您的IndexOutOfBoundsException方法也可能包含一个设计缺陷:它当前编码的方式,它填充了addAccount数组中所有空白点custAcct作为一个论点传递。如果您只想将帐户添加到第一个空位置,请使用以下命令:

BankAccount

答案 1 :(得分:0)

我认为这应该来自这里(也许发送堆栈跟踪会有所帮助)

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

为acctVal传递的值是多少,如果该值小于0或大于等于custAcct.length,则可能存在Array out of bound异常。另一个问题可能是custAcct [i]未初始化,并且可能存在空指针异常。如果给出堆栈跟踪,可以更好地说明。