java - 遍历矩阵的元素
问题描述
我正在编写一个由矩阵(二维数组)支持的自定义哈希图实现。我想遍历元素并打印它们,但想避免打印空元素。
hashmap 仅支持整数并将哈希码计算为输入 mod 10。它将这些整数存储在适当的哈希码索引中,并通过遍历子数组并将整数放入子数组的下一个可用索引来解决冲突。如果超过给定子数组的最大索引,它将创建一个大小为原始数组 1.5 倍的新数组并将元素复制到该数组。
问题是每次等于子数组长度时System.out.print
都会抛出一个,所以while循环没有按预期工作。ArrayIndexOutOfBoundsException
iterator
我已经尝试过更改 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)
解决方案
将检查顺序反转为 while(iterator < array[i].length && array[i][iterator] != null) { ... }
推荐阅读
- javascript - .htaccess 阻止来自移动站点(又名 root/mobile)的图像
- cordova - 如何检查我的 ionic 3 应用程序中的可用 RAM?
- php - Mysql查询不适用于IST时区
- amazon-cloudwatch - AWS RDS Aurora 可用磁盘空间指标
- angular - 我在组件 Angular 8 中调用服务时未定义
- c - 使用包含字符串的 sscanf 解析字符串
- flutter - 无法使用提供程序将表单登录屏幕导航到 bottom_tab_screen
- android - 使用 Source.Server 但用户未连接到 Internet 时,我可以获得 Firestore 错误代码吗?
- python - 无法在 Windows 上的 pycharm 上安装 scikit-learn
- python - 将输入值列表与 Flask webapp 中的数据库查询匹配