我正在解决一个给出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处的第二个数组不存在。还有另一种检查方法吗?
答案 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