java.lang.ArrayIndexOutOfBoundsException:48

时间:2014-04-14 16:37:28

标签: java arrays indexoutofboundsexception dijkstra

我对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];
}

(代码继续)

2 个答案:

答案 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