“线程中的异常”;“主要”;java.lang.ArrayIndexOutOfBoundsException:添加数组对象时出现3

“线程中的异常”;“主要”;java.lang.ArrayIndexOutOfBoundsException:添加数组对象时出现3,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我需要用一个方法来做一个程序,该方法接收一个二维3*3数组,其中包含几个教授的信息(在一个叫做“教授”的类中创建),并得到他们工作的小时数,他们每小时挣多少钱,然后将它们加起来,得到一个变量,该变量返回支付给教授的总金额。我已经使用构造函数创建了类、数组和包含信息的对象,并将每个对象放在数组的每个索引中。 但是,当我在数组中循环时,我总是将此错误消息作为输出: 线程“main”java.lang.ArrayIndexOutOfBoundsException中出现异常异常:3 这是我的代码(对象上

我需要用一个方法来做一个程序,该方法接收一个二维3*3数组,其中包含几个教授的信息(在一个叫做“教授”的类中创建),并得到他们工作的小时数,他们每小时挣多少钱,然后将它们加起来,得到一个变量,该变量返回支付给教授的总金额。我已经使用构造函数创建了类、数组和包含信息的对象,并将每个对象放在数组的每个索引中。 但是,当我在数组中循环时,我总是将此错误消息作为输出:

线程“main”java.lang.ArrayIndexOutOfBoundsException中出现异常异常:3

这是我的代码(对象上的最后两个数字是(按顺序)教授工作的小时数和他们每小时赚的钱。为了测试目的,我创建了所有具有相同信息的对象,所以8是小时,1.66是钱:

publicstaticvoidmain(字符串[]args){
//此处的TODO代码应用程序逻辑
扫描仪输入=新扫描仪(系统输入);
阿雷格洛教授[];
arreglo=新教授[3][3];
Profesor profe1=新教授(126509404,“埃德加”,“赫尔南德斯”,29,“M”,8,1.66);
Profesor profe2=新教授(233849920,“Nuria”,“Ramírez”,52,“F”,4,2.84);
Profesor profe3=新教授(126509404,“埃德加”,“赫尔南德斯”,29,“M”,8,1.66);
Profesor profe4=新教授(126509404,“埃德加”,“埃尔南德斯”,29,“M”,8,1.66);
Profesor profe5=新教授(126509404,“埃德加”,“赫尔南德斯”,29,“M”,8,1.66);
Profesor profe6=新教授(126509404,“埃德加”,“赫尔南德斯”,29,“M”,8,1.66);
Profesor profe7=新教授(126509404,“埃德加”,“赫尔南德斯”,29,“M”,8,1.66);
Profesor profe8=新教授(126509404,“埃德加”,“埃尔南德斯”,29,“M”,8,1.66);
Profesor profe9=新教授(126509404,“埃德加”,“赫尔南德斯”,29,“M”,8,1.66);
arreglo[0][0]=1;
arreglo[0][1]=2;
arreglo[0][2]=3;
arreglo[1][0]=4;
arreglo[1][1]=5;
arreglo[1][2]=6;
arreglo[2][0]=7;
arreglo[2][1]=8;
arreglo[2][3]=9;
System.out.println(“萨拉里奥斯之家:“+sumaSalarios(arreglo));
}
公共静态双sumaSalarios(matriz教授[]){
int-sumaHoras=0;
双倍双额额额额额额额额额额额额额额额额额额额额额额额额额额额额额额额额额额额额额=0;
双萨拉里奥斯=0;
对于(int i=0;i
意味着您有3个索引:0、1和2

您尝试在第四个索引处添加一名教授:
arreglo[2][3]=profe9;

意味着您有3个索引:0、1和2

您尝试在第四个索引处添加一名教授:
arreglo[2][3]=profe9;
两件事:

  • 数组索引从0开始,但我打赌你已经知道了
  • 数组一旦声明,在Java中的大小是固定的;一旦分配,它们就不能缩小或扩展
代码中的
arreglo[2][3]=profe9;
行将抛出该错误,因为您将数组声明为:

arreglo = new Profesor[3][3];
但是您的
Professor[]
数组,由
arreglo[2]
引用,只有3个元素;使用索引
3
,您尝试访问它的第4个元素,它不存在-->
ArrayIndexOutOfBoundsException
。它有一个相当有意义的名称;)


注意:如果您想要一个“可调整大小的二维数组”,尽管它并不完全符合该定义,但您可以看看Guava的

两件事:

arreglo = new Profesor[3][3];
  • 数组索引从0开始,但我打赌你已经知道了
  • 数组一旦声明,在Java中就具有固定的大小;一旦分配了它们,就不能缩小或扩展它们
你的
arreglo[2][3]=profe9行将抛出该错误,因为您将数组声明为:

arreglo = new Profesor[3][3];
但是你的
Professor[]
数组,由
arreglo[2]
引用,只有3个元素;使用索引
3
,您可以尝试访问它的第4个元素,该元素不存在-->
ArrayIndexOutOfBoundsException
。这个名字很有意思;)


注意:如果你想要一个“可调整大小的二维数组”,尽管它并不完全符合这个定义,你可以看看Guava的

arreglo = new Profesor[3][3];
在此处定义数组时,指定其长度应为3。 但是,计数从0开始,因此您的3个位置是0、1和2

这意味着当您尝试访问索引3时

arreglo[2][3] = profe9;
您试图访问数组中不存在的第4项,因此它引发异常

在此处定义数组时,指定其长度应为3。 但是,计数从0开始,因此您的3个位置是0、1和2

这意味着当您尝试访问索引3时

arreglo[2][3] = profe9;

您试图访问数组中不存在的第4项,因此它引发异常。

arreglo[2][3]=9;对于简单的打字错误,3应该是2个大问题嗯,我现在觉得有点跛了,呵呵。。。谢谢。现在我的问题是,加上教授的工资总额,我得到了0.0。我知道目前的问题符合离题的描述。然而,对于同一个项目,我确实有一个不同的问题,我相信这不像以前那样是一个印刷错误。我可以改变问题的主题,在同一个帖子上添加我的新问题吗?还是我应该做另一个问题?一定要创建一个新的问题。arreglo[2][3]=profe9;3.