我需要用一个方法做一个程序,该方法接收一个二维3*3数组,其中包含几个教授的信息(在一个名为"Professor"的类中创建(,并获得他们工作的小时数、每小时赚多少钱,然后将它们加在一个变量中,该变量返回支付给教授的总金额。我已经使用构造函数创建了类、数组和带有信息的对象,并将每个对象放在数组的每个索引中。然而,当我循环遍历数组时,我总是得到以下错误消息作为输出:
线程"main"java.lang.ArrayIndexOutOfBoundsException异常:3
这是我的代码(物体上的最后两个数字(按顺序(是教授工作的小时数和他们每小时赚的钱。出于测试目的,我使用相同的信息创建了所有对象,因此8是小时,1.66是钱:
public static void main(String[] args) {
// TODO code application logic here
Scanner in = new Scanner(System.in);
Profesor arreglo[][];
arreglo = new Profesor[3][3];
Profesor profe1 = new Profesor(126509404, "Edgar", "Hernandez", 29, "M", 8, 1.66);
Profesor profe2 = new Profesor(233849920, "Nuria", "Ramírez", 52, "F", 4, 2.84);
Profesor profe3 = new Profesor(126509404, "Edgar", "Hernandez", 29, "M", 8, 1.66);
Profesor profe4 = new Profesor(126509404, "Edgar", "Hernandez", 29, "M", 8, 1.66);
Profesor profe5 = new Profesor(126509404, "Edgar", "Hernandez", 29, "M", 8, 1.66);
Profesor profe6 = new Profesor(126509404, "Edgar", "Hernandez", 29, "M", 8, 1.66);
Profesor profe7 = new Profesor(126509404, "Edgar", "Hernandez", 29, "M", 8, 1.66);
Profesor profe8 = new Profesor(126509404, "Edgar", "Hernandez", 29, "M", 8, 1.66);
Profesor profe9 = new Profesor(126509404, "Edgar", "Hernandez", 29, "M", 8, 1.66);
arreglo[0][0] = profe1;
arreglo[0][1] = profe2;
arreglo[0][2] = profe3;
arreglo[1][0] = profe4;
arreglo[1][1] = profe5;
arreglo[1][2] = profe6;
arreglo[2][0] = profe7;
arreglo[2][1] = profe8;
arreglo[2][3] = profe9;
System.out.println("La suma de los salarios es: " +sumaSalarios(arreglo));
}
public static double sumaSalarios(Profesor matriz[][]) {
int sumaHoras = 0;
double sumaValorHoras = 0;
double salarios = 0;
for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz.length; j++) {
sumaHoras = sumaHoras + matriz[i][j].getHoras();
}
}
for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz.length; j++) {
sumaValorHoras = sumaValorHoras + matriz[i][j].getValorHora();
}
}
return salarios = sumaHoras*sumaValorHoras;
}
两件事:
- 数组索引从0开始,但我敢打赌你已经知道了
- 数组一旦声明,在Java中就具有固定的大小;一旦分配了它们,就不能收缩或扩展它们
您的代码中的arreglo[2][3] = profe9;
行将抛出该错误,因为您将数组声明为:
arreglo = new Profesor[3][3];
但是arreglo[2]
引用的Professor[]
数组只有3个元素;使用索引3
,您可以尝试访问它的第4个元素,该元素不存在-->ArrayIndexOutOfBoundsException
。它有一个很有意义的名字;(
注意:如果你想要一个"可调整大小的二维数组",尽管它并不完全符合这个定义,但你可以看看Guava的Table
arreglo = new Profesor[3][3];
在此处定义数组时,指定其长度应为3。但是,计数从0开始,因此您的3个位置分别为0、1和2。
这意味着当你试图访问索引3时,
arreglo[2][3] = profe9;
您正试图访问数组中不存在的第4个项,因此它抛出异常。
Profesor arreglo[][];
arreglo = new Profesor[3][3];
意味着您有3个索引:0、1和2
您尝试在arreglo[2][3] = profe9;
的第四个索引处添加一个教授