Java不规则数组

杰米粉2021-08-31 11:39

通过前面的学习我们知道Java实际上没有多维数组,只有一维数组。多维数组被解释为是数组的数组,所以因此会衍生出一种不规则数组。

Java不规则数组

规则的4×3二维数组有12个元素,而不规则数组就不一定了。如下代码静态初始化了一个不规则数组。

int intArray[][] = {{1,2}, {11}, {21,22,23}, {31,32,33}};

高维数组(二维以及二维以上的数组称为高维数组)是4个元素,但是低维数组元素个数不同,如图1所示,其中第1个数组有两个元素,第2个数组有1个元素,第3个数组有3个元素,第4个数组有3个元素。这就是不规则数组。

Java不规则数组

动态初始化不规则数组比较麻烦,不能使用new int[4][3]语句,而是先初始化高维数组,然后再分别逐个初始化低维数组。代码如下:

int intArray[][] = new int[4][]; //先初始化高维数组为4
// 逐一初始化低维数组
intArray[0] = new int[2];
intArray[1] = new int[1];
intArray[2] = new int[3];
intArray[3] = new int[3];

从上述代码初始化数组完成之后,不是有12个元素而是9个元素,它们的下标索引如图2所示,可见其中下标[0][2]、[1][1]和[1][2]是不存在的,如果试图访问它们则会抛出下标越界异常。

Java不规则数组

提示:下标越界异常(ArrayIndexOutOfBoundsException)是试图访问不存在的下标时引发的。例如一个一维array数组如果有10个元素,那么表达式array[10]就会发生下标越界异常,这是因为数组下标是从0开始的,最后一个元素下标是数组长度减1,所以array[10]访问的元素是不存在的。

下面介绍一个不规则数组的示例:

import java.util.Arrays;
public class HelloWorld {
    public static void main(String[] args) {
        int intArray[][] = new int[4][]; // 先初始化高维数组为4
        // 逐一初始化低维数组
        intArray[0] = new int[2];
        intArray[1] = new int[1];
        intArray[2] = new int[3];
        intArray[3] = new int[3];
        // for循环遍历
        for (int i = 0; i < intArray.length; i++) {
            for (int j = 0; j < intArray[i].length; j++) {
                intArray[i][j] = i + j;
            }
        }
        // for-each循环遍历
        for (int[] row : intArray) {
            for (int column : row) {
                System.out.print(column);
                // 在元素之间添加制表符,
                System.out.print('\t');
            }
            // 一行元素打印完成后换行
            System.out.println();
        }
        System.out.println(intArray[0][2]); // 发生运行期错误
    }
}

不规则数组访问和遍历可以使用for和for-each循环,但要注意下标越界异常发生。

上述代码第18行和第19行采用for-each循环遍历不规则数组,其中代码第18行for-each循环取出的数据是int数组,所以row类型是int[]。代码第19行for-each循环取出的数据是int数据,所以column的类型int。另外,注意代码第27行试图访问intArray[0][2]元素,由于[0][2]不存在所以会发生下标越界异常。

以上就是小编为大家整理发布的“Java不规则数组”一文,更多相关内容尽在开课吧Java教程频道。

Java不规则数组

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享