java.lang.ArrayIndexOutOfBoundsException:48

java.lang.ArrayIndexOutOfBoundsException:48,java,arrays,indexoutofboundsexception,dijkstra,Java,Arrays,Indexoutofboundsexception,Dijkstra,我有一个关于Dijkstra算法的练习,当我运行我的程序时,我得到以下错误: 线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:48 怎么了?我无法发送整个代码,因为它有200行。但是问题出现在cmd中的那些行中 dist[i]=整数的最大值;和 距离[i]=0 谢谢你的帮助 public static void DijkstraOnNode (int start) { int[] dist = new int [myNodes.si

我有一个关于Dijkstra算法的练习,当我运行我的程序时,我得到以下错误: 线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:48
怎么了?我无法发送整个代码,因为它有200行。但是问题出现在cmd中的那些行中
dist[i]=整数的最大值;和 距离[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];
}
公共静态void DijkstraOnNode(int start){
int[]dist=new int[myNodes.size()];//其中myNodes是Hashset的ArrayList
//Link是一个包含节点权重的类
int[]pred=newint[myNodes.size()];
int[]pq=新的int[myNodes.size()];

对于(int i=0;i
for)(int i=0;i
for)(int i=0;i
for)(int i=0;i
for)(int i=0;i数组:编号从0开始。
例如,第9个元素将在索引8处访问。
所以在循环中:


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


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


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



对于(int i=0;i数组是0基索引的。因此,对于(int i=0;i{
数组的可能副本是0基索引的。因此,对于(int i=0;i数组的可能副本是0基索引的。因此它应该是
for(int i=0;i
数组的可能重复项是0个基本索引。因此它应该是
for(int i=0;i
可能重复使用更好的
dist.length
我这样做了,但是当我在cmd中再次运行程序时,它不会返回任何结果。或者它会让我键入任何内容。就像一个不停的循环。但这可能是另一个方法的问题。。无论如何谢谢!@MariaP你的方法是无效的,不会打印任何内容。如果(printaries){System.out.println(“前置矩阵”);System.out.println(Arrays.toString(pred));当我只想运行算法时,PrintArray被初始化为false,但当我想打印它们时,我用true初始化。void不允许吗?@MariaP这样就可以了。你可以用void方法打印。更好的方法是使用
dist.length
我这样做了,但是当我再次在cmd中运行程序时,它不会返回任何值。或者它会让我键入任何东西。像一个不停的循环。但这可能是另一个方法的问题。。无论如何谢谢!@MariaP你的方法是无效的,没有打印任何东西。我在方法中有if(printrays){System.out.println(“前置矩阵”);System.out.println(Arrays.toString(pred));当我只想运行算法时,PrintArray被初始化为false,但当我想打印它们时,我用true初始化。void不允许吗?@MariaP这样就可以了。你可以用void方法打印。更好的方法是使用
dist.length
我这样做了,但是当我再次在cmd中运行程序时,它不会返回任何值。或者它会让我键入任何东西。像一个不停的循环。但这可能是另一个方法的问题。。无论如何谢谢!@MariaP你的方法是无效的,没有打印任何东西。我在方法中有if(printrays){System.out.println(“前置矩阵”);System.out.println(Arrays.toString(pred));当我只想运行算法时,PrintArray被初始化为false,但当我想打印它们时,我用true初始化。void不允许吗?@MariaP这样就可以了。你可以用void方法打印。更好的方法是使用
dist.length
我这样做了,但是当我再次在cmd中运行程序时,它不会返回任何值。或者它会让我键入任何东西。像一个不停的循环。但这可能是另一个方法的问题。。无论如何谢谢!@MariaP你的方法是无效的,没有打印任何东西。我在方法中有if(printrays){System.out.println(“前置矩阵”);System.out.println(Arrays.toString(pred));当我只想运行算法时,PrintArray被初始化为false,但当我想打印它们时,我用true初始化。void不允许吗?@MariaP这样就可以了。你可以用void方法打印。
for (int i = 0; i <= myNodes.size(); i++) 
for (int i = 0; i < myNodes.size(); i++)