我是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类答案 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);