我对Dijkstra算法进行了练习,当我运行我的程序时,我收到以下错误:
线程" main"中的例外情况java.lang.ArrayIndexOutOfBoundsException:48
怎么了?我无法发送整个代码,因为它是200行。但问题出现在cmd中的那些行中
dist [i] = Integer.MAX_VALUE;和
dist [i] = 0;
感谢您的帮助。
public static void DijkstraOnNode (int start) {
int[] dist = new int [myNodes.size()]; //where myNodes is an ArrayList of Hashset<Link>
//and Link is a class that contains node kai weight
int[] pred = new int [myNodes.size()];
int[] pq = new int [myNodes.size()];
for (int i = 0; i <= myNodes.size(); i++) {
if (i!= start)
dist[i] = Integer.MAX_VALUE;
else
dist[i] = 0;
pq[i] = dist[i];
}
(代码继续)
答案 0 :(得分:3)
for (int i = 0; i <= myNodes.size(); i++)
这会导致问题 将其更改为
for (int i = 0; i < myNodes.size(); i++)
因为,假设myNodes.size()
返回8并且您尝试到达dist [8],但dist[]
数组从0开始并在7结束。
答案 1 :(得分:0)
数组:编号从0开始。 例如,第9个元素将在索引8处访问。 所以在循环中:
for(int i = 0; i&lt; = myNodes.size(); i ++)
您尝试访问数组的元素:dist [myNodes.size()],它不存在。它超出阵列的界限。 数组的最后一个元素有索引:myNodes.size() - 1
您可以在此处查看有关数组的更多信息: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html