【问题标题】:java.lang.ArrayIndexOutOfBoundsException: 48java.lang.ArrayIndexOutOfBoundsException:48
【发布时间】:2014-04-14 16:37:28
【问题描述】:

我有一个关于 Dijkstra 算法的练习,当我运行我的程序时,我收到以下错误: 线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:48
怎么了?我无法发送整个代码,因为它有 200 行。但是问题出现在 cmd
的那些行中 dist[i] = 整数.MAX_VALUE;和 距离[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];
}

(代码继续)

【问题讨论】:

标签: java arrays indexoutofboundsexception dijkstra


【解决方案1】:
for (int i = 0; i <= myNodes.size(); i++) 

这会导致问题 把它改成

for (int i = 0; i < myNodes.size(); i++) 

因为,假设 myNodes.size() 返回 8 并且您正试图到达 dist[8] 但 dist[] 数组从 0 开始并在 7 结束。

【讨论】:

  • 最好还是使用dist.length
  • 我这样做了,但是当我在 cmd 中再次运行程序时,它返回 nohnig。要么它会让我输入任何东西。就像一个不停的循环。但也许那是另一种方法的问题.. 无论如何谢谢!
  • @MariaP 你的方法是无效的,不会打印出任何东西。
  • 我有方法 if (printArrays) { System.out.println("Predecessor matrix"); System.out.println(Arrays.toString(pred));当我只想运行算法时,printArrays 被初始化为 false,但是当我想打印它们时,我将其初始化为 true。 void不允许吗?
  • @MariaP 那没关系。您可以使用 void 方法打印。
【解决方案2】:

数组:编号从 0 开始。 例如,第 9 个元素将在索引 8 处访问。 所以在循环中:

for (int i = 0; i

您尝试访问不存在的数组元素: dist[myNodes.size()]。它超出了数组的范围。 数组的最后一个元素有索引:myNodes.size() - 1

您可以在此处查看有关数组的更多信息: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2014-01-30
    • 2016-04-11
    • 2014-06-20
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多