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



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

我想我可以做一个简单的长度检查或null检查,但这些都不起作用。我得到一个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的数组不存在。还有别的方法检查吗?

information.length将返回包含的数组数。information[n].length将返回索引n处数组的长度。当你检查if(information[1].length <= 0 ...时,你检查的是是否有第二个数组以及这个数组的长度是多少。如果没有第二个数组,你将得到一个越界。

试题:

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

Java中的二维数组实际上只是数组的数组。因此,您需要检查"外部"数组(数组的数组)和"内部"数组(在您的示例中是int的数组)的长度。不幸的是,从你的代码中不清楚你想做什么,所以根据你的目标和你对调用者的了解(例如,信息本身是否为空),你可能想检查以下一些或全部:

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

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

你写的

:

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为true

相关内容

  • 没有找到相关文章

最新更新