2012-08-26 38 views
1

對於Java而言,我絕對是新手,並且在引用另一個.java文件中聲明的類時遇到問題。我在Oracle網站上閱讀了很多關於它的知識,還有很多stackoverflow問題,但無法解決問題。以下是我採取的步驟:在我的程序中的另一個.java文件中引用類

設置類路徑。 我在UNIX上運行這個。所以我輸入 % java -classpath /users/myUserName/algs4/assignment1。而不是改變班級路徑,它給了我一長串其他選項。

在我的每個.java文件中包含'包名稱',這些文件具有我想要引用的類定義。

我還確保我想要引用的所有文件位於同一個目錄中。 下面是我的一些代碼:

package assignment1; 
public class Percolation 
{ 
    private int[][] grid; 
    .... 
    //Other method definitions etc. 
    public Percolation(int N) 
    { 
     uf = new WeightedQuickUnionUF(N); 
     grid = new int[N][N]; 
     ... 
     //Other code 

    } 

} 

我WeightedQuickUnionUF類也被定義爲:

package assignment1; 
public class WeightedQuickUnionUF { 
    private int[] id; // id[i] = parent of i 
    private int[] sz; // sz[i] = number of objects in subtree rooted at i 
    private int count; // number of components 

    //Create an empty union find data structure with N isolated sets. 
    public WeightedQuickUnionUF(int N) { 
     count = N; 
     id = new int[N]; 
     sz = new int[N]; 
     for (int i = 0; i < N; i++) { 
      id[i] = i; 
      sz[i] = 1; 
     } 
    } 
} 

但現在當我編譯使用javac Percolation.java。它給我的錯誤:

Percolation.java:7: cannot find symbol 
symbol : class WeightedQuickUnionUF 
location: class assignment1.Percolation 
WeightedQuickUnionUF uf; 
^ 

我知道這是因爲編譯器不知道什麼是WeightedQuickUnionUF類。它無法引用它。但是,我該怎麼做呢?我已經嘗試了流行的解決方案。

我沒有使用任何IDE。只需一個文本編輯器,然後在終端上編譯它。

(algs4文件夾中有一個像stdlib.jar文件及其它文件)

編輯:我錯過了 '新' 的關鍵字。我已經補充說。另外我在編譯我的WeightedQuickUnionUF類之前Percolation.java

回答

2

java命令沒有設置類路徑,但試圖運行一個Java類。這就是爲什麼長選項列表。

您可以在編譯時指定類路徑:從algs4目錄運行javac -classpath . assignment1/Percolation.java。注意點就是當前目錄。

沒有必要按順序編譯文件。

從algs4目錄運行程序:java -cp . assignment1.Percolation

+0

在我的機器上測試,它編譯並運行成功。 – dcernahoschi

+0

謝謝作品!還有一個問題,爲什麼我要從algs4目錄編譯而不是assignment1? – mvb

+0

你應該從algs編譯:像在上面的答案 – dcernahoschi

1

您需要首先編譯依賴關係,即,在您的情況下,WeightedQuickUnionUF類。

如果你想要一個匿名對象,用new關鍵字一起聲明它:

uf = new WeightedQuickUnionUF(N); 

或將其作爲在另一個答覆中提到。

由於這個問題的答案被刪除(我沒有看到它了),周圍的其他方法是有一個命名對象:

WeightedQuickUnionUF myObj; 

..

myObj = new WeightedQuickUnionUF(N); 
uf = myObj; 
+0

我首先編譯了WeightedQuickUnionUF類。而且我還添加了新的關鍵字,但同樣的信息。 Percolation.java:6:找不到符號 symbol:class WeightedQuickUnionUF – mvb

0

必須編譯的類在

order of the flow of the Object Graph. 

這意味着滲流類CAN NOT編譯的WeightedQuickUnionUF被編譯之前。

所以首先編譯WeightedQuickUnionUF然後滲濾。

我想你甚至在初始化WeightedQuickUnionUF(N)的時候錯過了new關鍵字。

uf = new WeightedQuickUnionUF(N); 
+0

我首先編譯了WeightedQuickUnionUF類。 (沒有錯誤)。此外,我添加了新的關鍵字,但同樣的問題。 – mvb

相關問題