java - 尽管在 java 中正确初始化了 arraylist,但得到一个错误
问题描述
我想在arraylist中传递值,并初始化好。但有一个错误 -
线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:3,大小:0
我正在努力,这是我的代码 -
public static void main(String[]args)
{
int n = 3;
ArrayList<ArrayList<Integer>> graph = new ArrayList<>(n+2);
for(int i=0; i < n+2 ; i++) {
graph.add(new ArrayList<>(n+2));
}
graph.get(1).add(3,9);
graph.get(2).add(3,1);
graph.get(1).add(2,5);
int s = 1, d = 3;
System.out.println(dijkstra(s,d,graph));
}
解决方案
您使用capacity =初始化 ArrayLists n + 2
,但 ArrayLists 在首次创建时仍然为空。容量与大小不同。
- 容量
- 在不分配任何额外内存的情况下可以添加到 ArrayList 的元素数
- 尺寸
- ArrayList 中实际存储的元素个数
您的调用ArrayList::add
引发了越界异常,因为空的 ArrayList 无法在 index = 3 处插入值。根据定义,添加到任何 ArrayList 的第一个值的 index = 0。
为什么要尝试在特定索引处插入值?解决方案将取决于您这样做的原因。
编辑:解决方案
创建 ArrayList 时,n + 2
使用值 = 0 的条目对其进行初始化。
...
ArrayList<ArrayList<Integer>> graph = new ArrayList<>(n+2);
for(int i=0; i < n+2 ; i++) {
ArrayList<Integer> sublist = new ArrayList<>(n+2);
for (int j = 0; j < n + 2; j++) {
sublist.add(0);
}
graph.add(sublist);
}
...
保持其余部分相同,它将按预期运行。
推荐阅读
- python - 当输入出现错误时,如何在 python 中调试此错误?
- python-3.x - 使用 zip 将列表与数据框结合起来 - AttributeError: 'str' object has no attribute 'loc'
- google-apps-script - 尝试使用应用脚本删除文件时访问被拒绝的云端硬盘应用
- ssh - 强制 ssh 使用特定算法进行主机识别
- docker - 为什么我的 Docker 容器找不到它应该创建的文件?
- reactjs - React tsParticles(烟花)不起作用
- mysql - 从 VARCHAR (MySQL) 中选择 MIN
- python - 我如何使用 Telethon(Pyton)从电报消息中获取 json
- python - 我可以让我的程序在列表中的变量(所有整数)之间随机选择,并返回变量而不是值吗?
- django - 如何通过编写的查询命令 django rest framework 搜索结果?