线程"main" java.lang.ArrayIndexOutOfBounds异常:3 添加数组的对象时



我需要用一个方法做一个程序,该方法接收一个二维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; 的第四个索引处添加一个教授

相关内容

  • 没有找到相关文章

最新更新