1

私はJavaにまったく慣れておらず、別の.javaファイルで宣言したクラスを参照するのに問題があります。Oracle Webサイトでそれについて多くのことを読み、また多くのスタックオーバーフローの質問を読みましたが、問題を解決できませんでした。これが私が取ったステップです:

クラスパスを設定します。 私はこれを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;
        }
     }
}

しかし今、javacPercolation.javaを使用してコンパイルすると。それは私にエラーを与えます:

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

コンパイラがWeightedQuickUnionUFクラスが何であるかを知らないためだと思います。参照できません。しかし、どうすればそれを行うことができますか?私はすでに人気のある解決策を試しました。

IDEを使用していません。テキストエディタを使って、ターミナルでコンパイルするだけです。

(algs4フォルダーにはstdlib.jarなどのファイルがあります)

編集:「新しい」キーワードを見逃しました。私はそれを追加しました。また、Percolation.javaの前にWeightedQuickUnionUFクラスをコンパイルしています

4

3 に答える 3

2

このjavaコマンドはクラスパスを設定していませんが、Javaクラスを実行しようとしています。そのため、長いオプションリストがあります。

コンパイル時にクラスパスを指定できますjavac -classpath . assignment1/Percolation.java。algs4ディレクトリから実行します。現在のディレクトリを意味するドットに注意してください。

ファイルを順番にコンパイルする必要はありません。

プログラムを実行するにjava -cp . assignment1.Percolationは:algs4ディレクトリから。

于 2012-08-26T06:22:57.527 に答える
1

最初に依存関係、つまりあなたの場合はWeightedQuickUnionUFクラスをコンパイルする必要があります。

newまた、匿名オブジェクトが必要な場合は、キーワードとともに宣言します。

uf = new WeightedQuickUnionUF(N);

または、別の回答で述べられているように使用してください。

その答えは削除されているので(もう表示されません)、逆に名前付きオブジェクトを作成することもできます。

WeightedQuickUnionUF myObj; 

..

myObj = new WeightedQuickUnionUF(N);
uf = myObj;
于 2012-08-26T06:23:09.273 に答える
0

クラスをコンパイルする必要があります

order of the flow of the Object Graph.

つまり、WeightedQuickUnionUFがコンパイルされる前に、 Percolationクラスをコンパイルすることはできません。

したがって、最初にWeightedQuickUnionUFをコンパイルし、次にPercolationをコンパイルします。

newWeightedQuickUnionUF(N);を初期化しているときに、キーワードを見逃したことさえあると思います。

uf = new WeightedQuickUnionUF(N);
于 2012-08-26T06:26:19.987 に答える