[英]check if 2d array is valid
假设someMethodThatCenReturnZero()返回0:
int[][] scanArray = new int[someMethodThatCenReturnZero()][2];
if (scanArray == null) {
PApplet.println("null");
}
if (scanArray[0] == null) {
PApplet.println("null");
}
它不会输出null,但是我得到了超出界限的异常的索引。
我可以尝试一下来抓住它。 我也可以在创建数组之前检查someMethodThatCenReturnZero() > 0
。 但是出于学习目的,还有另一种方法吗?
scanArray.length
会给zero
如果someMethodThatCenReturnZero()
返回zero
。 因此,您的情况可能是:
if(scanArray.length == 0){
PApplet.println("null");
}
该程序不会输出null
因为您使用new
运算符实例化了scanArray
。 您可以尝试if(scanArray.length > 0)
以获得正确的结果。
如果此行成功完成:
int[][] scanArray = new int[someMethodThatCenReturnZero()][2];
然后这将永远不会发生:
if (scanArray == null) {
PApplet.println("null");
}
调用new
的结果永远不会为空。 相反,您应该检查scanArray.length == 0
。
当您调用new int[someMethodThatCenReturnZero()][2]
时,您使scanArray
不为null
。
您正在接收超出范围的索引,因为如果someMethodThatCenReturnZero
返回0
则数组的大小为0
并且您正在尝试访问数组边界之外的第一项scanArray[0]
。
当array
的索引从0
到(size of the array) - 1
,或者在array
大小为0
的情况下,没有有效的索引。
Java
最佳实践是在假定第 0 个元素之前检查数组的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
所以当length
为0
, for
循环永远不会运行。
最后一个代码段是处理可能为空的数组的常用方法,因为它是一个仅在array
有效索引上循环的循环。
您最初的方法遵循的是python世界中常见的一种风格,即EAFP(比许可更容易请求宽恕),即,您只需要处理它,并在出现异常时对其进行处理。
该for
循环的方法或length
检查遵循LBYL(看之前LEAP)这需要neccessary措施,以避免其中的情况下,方法Exception
(即可能会被抛出null
当你在你的例子有用于检查scanArray == null
)。
由于Java
是一种非常明确的语言,因此通常首选LBYL风格的编码,但两者均有效,因此一种更容易发生危险(EAFP)。 这个讨论值得一看。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.