首页 > 解决方案 > 遍历矩阵的元素

问题描述

我正在编写一个由矩阵(二维数组)支持的自定义哈希图实现。我想遍历元素并打印它们,但想避免打印空元素。

hashmap 仅支持整数并将哈希码计算为输入 mod 10。它将这些整数存储在适当的哈希码索引中,并通过遍历子数组并将整数放入子数组的下一个可用索引来解决冲突。如果超过给定子数组的最大索引,它将创建一个大小为原始数组 1.5 倍的新数组并将元素复制到该数组。

问题是每次等于子数组长度时System.out.print都会抛出一个,所以while循环没有按预期工作。ArrayIndexOutOfBoundsExceptioniterator

我已经尝试过更改 while 循环,以便迭代器变量应该小于每个子数组的最大索引。将条件更改为iterator < array[i].length - 1将避免异常,但 Java 不会打印每个子数组的最后一个元素。

public void print () {
        int iterator = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] == null)
                continue;
            System.out.print("[");
            while (array[i][iterator] != null && iterator < array[i].length) {
                System.out.print(array[i][iterator] + ", ");
                iterator++;
            }
            System.out.println ("]");
            iterator = 0;
        }
    }

输出应该是这样的

[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, ]
[1, 11, 21, 31, 41, 51, 61, 71, 81, 91, ]...

但实际输出是

[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
    at regularexpression.HashMap.print(HashMap.java:42)

标签: java

解决方案


将检查顺序反转为 while(iterator < array[i].length && array[i][iterator] != null) { ... }


推荐阅读