在我的程序中引用另一个.java文件中的类

时间:2012-08-26 06:14:44

标签: java

我是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等文件)

编辑:我错过了'new'关键字。我补充说。我也在Percolation.java

之前编译我的WeightedQuickUnionUF类

3 个答案:

答案 0 :(得分:2)

java命令没有设置类路径,而是尝试运行java类。这就是长选项列表的原因。

您可以在编译时指定类路径:从algs4目录运行javac -classpath . assignment1/Percolation.java。注意它代表当前目录的点。

无需按顺序编译文件。

从algs4目录运行程序:java -cp . assignment1.Percolation

答案 1 :(得分:1)

您需要首先编译依赖项,即在您的情况下编译WeightedQuickUnionUF类。

如果您想要一个匿名对象,请将其与new关键字一起声明:

uf = new WeightedQuickUnionUF(N);

或者在另一个答案中提到它。

由于该答案被删除(我不再看到它),另一种方法是拥有一个命名对象:

WeightedQuickUnionUF myObj; 

...

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

答案 2 :(得分:0)

您必须在

中编译类
order of the flow of the Object Graph.

这意味着在WeightedQuickUnionUF编译之前,编译

首先编译WeightedQuickUnionUF然后编译Percolation。

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

uf = new WeightedQuickUnionUF(N);