检查2d数组是否有效

时间:2014-04-24 15:25:10

标签: java arrays

假设someMethodThatCenReturnZero()返回0:

int[][] scanArray = new int[someMethodThatCenReturnZero()][2];

if (scanArray == null) {
  PApplet.println("null");
}

if (scanArray[0] == null) {
    PApplet.println("null");
}

它不会打印null,但我得到的索引超出了绑定异常。

我可以用try块来捕获它。我也可以在创建阵列之前检查someMethodThatCenReturnZero() > 0。但是出于学习的目的,还有另一种方式吗?

5 个答案:

答案 0 :(得分:2)

如果scanArray.length返回zero

someMethodThatCenReturnZero()将会zero。所以你的情况可能是:

if(scanArray.length == 0){
  PApplet.println("null");
}

答案 1 :(得分:0)

该程序无法打印null,因为您使用scanArray运算符实例化了new。您可以尝试if(scanArray.length > 0)以获得正确的结果。

答案 2 :(得分:0)

如果此行成功完成:

int[][] scanArray = new int[someMethodThatCenReturnZero()][2];

然后这种情况永远不会发生:

if (scanArray == null) {
   PApplet.println("null");
}

调用new的结果永远不会为空。相反,您应该检查scanArray.length == 0

答案 3 :(得分:0)

当您致电scanArray

时,您null而非new int[someMethodThatCenReturnZero()][2]

您收到的索引超出范围,因为如果someMethodThatCenReturnZero返回0,则数组的大小为0,并且您正尝试访问第一项scanArray[0]超出了数组的范围。

array被编入索引0(size of the array) - 1时,或者0大小array没有有效索引。

Java中的最佳做法是在假设存在0 th 元素之前检查数组的length属性。

if (scanArray.length > 0) {
    System.out.println("Non empty!");
} else {
    System.out.println("Empty!");
}

如果要检查是否有任何数组元素为空:

for (int i = 0; i < scanArray.length; i++) {
    if (scanArray[i] == null) {
        System.out.println("The " + i + "th element is null");
    }
}

此循环允许安全调用任何索引,因为在它为空的情况下,for循环被赋予仅在i < scanArray.length时循环运行的指令。 i已启动0,因此当length0时,for循环永远不会运行。

最后一个代码片段是处理可能空数组的常用方法,因为它是一个仅在array的有效索引上循环的循环。

你原来的认可遵循一种在蟒蛇世界中常见的风格,即EAFP(更容易请求宽恕而不是许可),即你只是去做它并处理例外情况。

for循环方法或length检查遵循LBYL(Look Before You Leap)方法,该方法采取必要步骤以避免可能抛出Exception的情况(即{{1像你在null)的例子中那样进行检查。

由于scanArray == null是一种非常明确的语言,因此LBYL编码风格通常是首选,但两者都是有效的,一种是更多的危险(EAFP)。 This discussion is worth looking at.

答案 4 :(得分:0)

你可以创建一个array of length zero,但是这个数组实际上是你期望的:一个长度为零的数组。

长度为0的数组不是null

尝试访问scanArray[0]您尝试访问数组的第一个元素,但该数组没有任何元素。