在2D数组中缺少数组检查 - Java

时间:2016-08-15 15:43:11

标签: java arrays multidimensional-array indexoutofboundsexception

我正在解决一个给出2D数组的问题。问题是,两个数组中的一个可能不存在于给定的2D数组中。

我想我可以做一个简单的长度检查或空检查,但这些都不起作用。我得到了一个arrayIndexOutOfBounds异常。

String smartAssigning(String[][] information) {
int[] employee1 = new int[3];
int[] employee2 = new int[3];
String name1 = "";
String name2 = "";

if(information[1].length <= 0 || information[1] == null)
{ return information[0][0];}

Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at _runefvga.smartAssigning(file.java on line 7)
... 6 more

索引0处的第一个数组存在但索引1处的第二个数组不存在。还有另一种检查方法吗?

3 个答案:

答案 0 :(得分:1)

information.length将返回包含的数组数。 information[n].length将返回索引n处数组的长度。当您检查if(information[1].length <= 0 ...时,您正在检查是否有第二个数组以及该数组的长度是多少。如果没有第二个数组,你将会超出范围。

尝试:

for(String[] array : information) {
    //do something...
}

答案 1 :(得分:0)

您需要考虑检查此条件的顺序。

您写道:

if(information[1].length <= 0 || information[1] == null)

首先检查information[1].length <= 0,并且只有在检查到information[1] == null时才会检错。

第二个条件没有意义,如果information[1] == null比评估information[1].length时已经抛出异常那样。

所以你需要将订单切换到:

if(information[1] == null || information[1].length <= 0)

第二个数组不存在,因此information[1] == null为真

答案 2 :(得分:0)

Java中的二维数组实际上只是一个数组数组。因此,您需要检查“外部”数组(数组数组)和“内部”数组(在您的情况下为int数组)的长度。 不幸的是,从您的代码中不清楚您想要做什么,因此根据您的目标以及您对呼叫者的了解(例如,信息本身可以为空),您可能需要检查以下部分或全部内容:

information!=null
information.length
information[x]!=null
information[x].length