2015-11-05 27 views
0

我正在研究在最小生成树上实现Kruskal算法的程序。我把它作为我的Kruskal.java文件中的主要方法。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]); 

line。我知道,当简单地说,当程序试图向数组中加载更多项目时,会出现数组越界异常。这最终导致它“走出界限”。在下面的主要方法中,EdgeWeightGraph引用程序中的另一个类EdgeWeightGraph.java。我相信它正从EdgeWeightedGraph类中填充,但我不完全确定。有关如何解决这个数组超出界限异常的任何建议?

编辑:这是我使用的In.java文件的链接:http://algs4.cs.princeton.edu/12oop/In.java.html这里是我的克鲁斯卡类,从上面的代码来自http://algs4.cs.princeton.edu/43mst/KruskalMST.java.html

+1

不,当尝试访问数组中不存在的元素时,会发生IOoBE。你通过命令行参数吗? – ChiefTwoPencils

+0

发布In类的代码以及堆栈跟踪。当您尝试访问不在数组中的索引时,会发生索引超出界限。即当数组长度为10时的索引10,索引10是第11个元素。 –

+0

我没有传递任何命令行参数 – user3068177

回答

2

错误仅仅是存在的,因为你不传球运行给定类的主要方法时的任何参数。

所以当JRE运行下面的语句

in = new In(args[0]); 

它没有得到在零的位置args阵列中的任何传递的参数;这导致了这个错误。

传递参数,你不会有这个错误了。

要了解如何正确地将参数传递给main方法,请参阅java documentation