2015-11-05 43 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