我正在研究一个在最小生成树上实现Kruskal算法的程序。我把它作为我的Kruskal.java文件中的主要方法。
public static void main(String[] args) {
In in;
in = new In(args[0]);
EdgeWeightedGraph G = new EdgeWeightedGraph(in);
Kruskal mst = new Kruskal(G);
for (Edge e : mst.edges()) {
StdOut.println(e);
}
StdOut.printf("%.5f\n", mst.weight());
}
我遇到的问题是当我尝试运行程序时,我收到一个超出范围的数组异常。该例外来自
in = new In(args[0]);
线。我知道,当简化地说,当程序试图将更多项加载到数组中而不是有空间时,就会发生数组超出范围异常。这最终导致它“超出界限”。在下面的main方法中,EdgeWeightGraph引用了程序中的另一个类EdgeWeightGraph.java。我相信它正在从EdgeWeightedGraph类填充,但我不完全确定。关于如何修复此数组超出范围异常的任何建议?
编辑:这是我正在使用的In.java文件的链接:http://algs4.cs.princeton.edu/12oop/In.java.html这里是我的Kruskal类,上面的代码来自http://algs4.cs.princeton.edu/43mst/KruskalMST.java.html
答案 0 :(得分:2)
错误只是发生,因为在运行给定类的main方法时没有传递任何参数。
所以当jre运行以下语句时
in = new In(args[0]);
它在{0}位置的args
数组中没有传递任何参数;这导致了这个错误。
传递参数,你不再有这个错误了。
要了解如何正确地将参数传递给main方法,请参阅java documentation。