我需要用一个方法来做一个程序,该方法接收一个二维3 * 3数组,其中包含几位教授的信息(在一个名为“教授”的类中创建),并获得他们工作的小时数,他们需要多少钱每小时制作并将它们添加到一个变量中,该变量返回支付给教授的总金额。我已经使用构造函数创建了类,数组,带有信息的对象,并将每个对象放在数组的每个索引中。 但是,当我循环遍历数组时,我总是将此错误消息作为输出:
线程“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 :(得分:2)
两件事:
您的代码中的arreglo[2][3] = profe9;
行会抛出该错误,因为您将数组声明为:
arreglo = new Profesor[3][3];
但Professor[]
引用的arreglo[2]
数组只有3个元素;使用索引3
,您尝试访问其第四个元素,该元素不存在 - &gt; ArrayIndexOutOfBoundsException
。其中有一个非常有意义的名字;)
注意:如果您想要一个可调整大小的二维数组&#34;虽然它不完全符合该定义,但您可以查看Guava的Table
答案 1 :(得分:1)
Profesor arreglo[][];
arreglo = new Profesor[3][3];
表示你有3个索引:0,1和2
您尝试在第四个索引处添加一个profesor:arreglo[2][3] = profe9;
答案 2 :(得分:1)
arreglo = new Profesor[3][3];
在此处定义数组时,指定它的长度应为3。 但是计数从0开始,所以你的3个位置是0,1和2。
这意味着当您尝试访问索引3时,
arreglo[2][3] = profe9;
您正在尝试访问数组中的第4项,该项目不存在,因此会抛出异常。