这是我的类到目前为止的代码,没有(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
答案 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]未初始化,并且可能存在空指针异常。如果给出堆栈跟踪,可以更好地说明。