1

我对 Java 完全陌生,并且无法引用我在另一个 .java 文件中声明的类。我在 Oracle 网站上阅读了很多关于它的内容以及许多 stackoverflow 问题,但无法解决问题。以下是我采取的步骤:

设置类路径。 我在 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 等文件)

编辑:我错过了“新”关键字。我已经添加了。我也在 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。

我认为您甚至错过了new关键字...在初始化 WeightedQuickUnionUF(N); 时

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