线程" main"中的例外情况java.lang.ArrayIndexOutOfBoundsException:3添加数组对象时

时间:2014-03-29 23:16:43

标签: java arrays multidimensional-array

我需要用一个方法来做一个程序,该方法接收一个二维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;

}

3 个答案:

答案 0 :(得分:2)

两件事:

  • 数组索引从0开始,但我打赌你已经知道了;
  • 数组一旦声明,在Java中具有固定大小;一旦他们被分配,他们不能缩小或扩展

您的代码中的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项,该项目不存在,因此会抛出异常。