为什么我的索引总是出界每当我试图显示一个数组?



我试图修改给定的代码,并添加一个平均到用户给定的2d数组内的所有元素。我初始化数组ave,使其具有与数组sum相同的元素,然后将其显示在for循环之外以进行计算。

import java.util.Scanner;
public class Arrays2D_GeneratorRevised {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
final int R=4, C=3;
int r,c;
double[][] volt = new double[R][C];
double[] sum = new double[R];
double[] ave = new double[R];
System.out.println("Enter the output voltages for the following generators :");
for(r=0; r<R; r++) {
System.out.print("Generator "+(r+1)+" :n");
for(c=0; c<C; c++) {
volt[r][c]=in.nextInt();
sum[r]+=volt[r][c];
ave[r]+=sum[r];
}
}
//display table
System.out.print("nt           Generator Test Results");
System.out.printf("nt%16s%10s%9s%10s","Output 1","Output 2","Output 3","Average");
for(r=0; r<R; r++) {
System.out.print("nGenerator "+(r+1));
for(c=0; c<C; c++) {
System.out.printf("%10.2f",volt[r][c]);
}
System.out.printf("%10.2f",sum[r]/C);
}
System.out.printf("%10.2f",ave[r]/=(R*C));
System.out.print("nn");
}
}

我尝试使ave到一个2d数组,并分配不同的变量R,C, C, R。每当我创建一个1d数组并使用参数array[i]显示它时,也会发生这种情况。不知何故,它只在我使用Arrays.toString()来显示或操作里面的元素时起作用。

错误在这一行:

for(r=0; r<R; r++)
{
[...]
}
System.out.printf("%10.2f",ave[r]/=(R*C));
// ^ HERE

for循环之后,r == R,这是数组结束后的一个。

查看代码,printf应该在循环内,而不是在循环外吗?

如果ave应该是所有四个生成器的平均值,那么您的计算是错误的。ave应该是一个标量,而不是一个数组。

import java.util.Scanner;
public class Arrays2D_GeneratorRevised {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
final int R=4, C=3;
int r,c;
double[][] volt = new double[R][C];
double[] sum = new double[R];
double ave = 0.0;
System.out.println("Enter the output voltages for the following generators :");
for(r=0; r<R; r++) {
System.out.print("Generator "+(r+1)+" :n");
for(c=0; c<C; c++) {
volt[r][c]=in.nextInt();
sum[r]+=volt[r][c];
ave+=sum[r];
}
}
//display table
System.out.print("nt           Generator Test Results");
System.out.printf("nt%16s%10s%9s%10s","Output 1","Output 2","Output 3","Average");
for(r=0; r<R; r++) {
System.out.print("nGenerator "+(r+1));
for(c=0; c<C; c++) {
System.out.printf("%10.2f",volt[r][c]);
}
System.out.printf("%10.2f",sum[r]/C);
}
System.out.printf("%n%10.2f",ave/=(R*C));
System.out.print("nn");
}
}

下面是一个示例:

Enter the output voltages for the following generators :
Generator 1 :
1 4 9
Generator 2 :
16 25 36
Generator 3 :
49 64 81
Generator 4 :
100 121 144
Generator Test Results
Output 1  Output 2 Output 3   Average
Generator 1      1.00      4.00      9.00      4.67
Generator 2     16.00     25.00     36.00     25.67
Generator 3     49.00     64.00     81.00     64.67
Generator 4    100.00    121.00    144.00    121.67
99.67

最新更新