java.lang.ArrayIndexOutOfBoundsException:48
我有一个关于Dijkstra算法的练习,当我运行我的程序时,我得到以下错误: 线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:48java.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
怎么了?我无法发送整个代码,因为它有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;ifor)(int i=0;ifor)(int i=0;ifor)(int i=0;ifor)(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++)