下面是代码
package disanzhang;
public class CompoundInterest {
public static void main(String[] args)
{
final double STARTRATE=10;
final int NRATES=6;
final int NYEARS=10;
double[]interestRate=new double[NRATES];
for(int j=0;j<interestRate.length;j++)
interestRate[j]=(STARTRATE+j)/100.0;
double[][]balances=new double[NYEARS][NRATES];
for(int j=0;j<balances.length;j++)
balances[0][j]=1000;
for(int i=1;i<balances.length;i++)
{for(int j=0;j<balances[i].length;j++)
{
double oldBalance=balances[i-1][j];
double interest =oldBalance*interestRate[j];
balances[i][j]=oldBalance+interest;
}
}
for(int j=0;j<interestRate.length;j++)
System.out.printf("%9.0f",100*interestRate[j]);
System.out.println();
for(double[]row:balances)
{
for(double b:row)
System.out.printf("%10.2f", b);
System.out.println();
}
}}下面是报的错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at disanzhang.CompoundInterest.main(CompoundInterest.java:14)
package disanzhang;
public class CompoundInterest {
public static void main(String[] args)
{
final double STARTRATE=10;
final int NRATES=6;
final int NYEARS=10;
double[]interestRate=new double[NRATES];
for(int j=0;j<interestRate.length;j++)
interestRate[j]=(STARTRATE+j)/100.0;
double[][]balances=new double[NYEARS][NRATES];
for(int j=0;j<balances.length;j++)
balances[0][j]=1000;
for(int i=1;i<balances.length;i++)
{for(int j=0;j<balances[i].length;j++)
{
double oldBalance=balances[i-1][j];
double interest =oldBalance*interestRate[j];
balances[i][j]=oldBalance+interest;
}
}
for(int j=0;j<interestRate.length;j++)
System.out.printf("%9.0f",100*interestRate[j]);
System.out.println();
for(double[]row:balances)
{
for(double b:row)
System.out.printf("%10.2f", b);
System.out.println();
}
}}下面是报的错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at disanzhang.CompoundInterest.main(CompoundInterest.java:14)
lang.ArrayIndexOutOfBoundsException: 6
lang.ArrayIndexOutOfBoundsException: 6
for(int j=0;j<balances[0].length;j++)
balances[0][j]=1000;
方括号中的下标可以为0~9;
因为你定义的double[][]balances=new double[NYEARS][NRATES],
NYEARS=10,NRATES=6,变量j对应的是NRATES最大为5;如果用balances.length,其对应的是NYEARS,最大为9,就超过了j的最大值,所以数组越界。