今天在做剑指offer第一题:二维数组的查找时,实现从左下来查找时竟然报出数组越界错误,但是仔细看代码和右上查找时几乎相同。
报错例子是一个二维空数组,我输出它的列长度和行长度才觉得这件事不简单。
对于一个空的二维数组,其行列的长度分别为多少呢?
例如:int arr = {{}};
行长度arr.length 和列长度 arr[0].length 分别为多少?
答案是 1 和 0 。
int[][] arr = {{}};
System.out.println(arr.length + " " + arr[0].length);
运行结果为:
1 0
仔细想想也能明白,如果行长度arr.length为0,那么二维数组就退化为一维数组 {} ,从性质上就发生了变化。
所以对于二维数组,arr[0] 总是不会越界的。
以此类推到多维空数组:即对于n维空数组,
arr.length=1
arr[0].length=1
arr[0][0].length=1
…
对于arr后面带n-1个[0]都是成立的,带n个[0]的arr长度为0.