这确实可能是一个非常简单的问题,但我对Java完全不熟悉,也没有解决它的问题。
我有一个stdlib.jar文件,其中有一些类定义为StdRandom,我必须在我的程序中使用它们。我读过,要使用像stdlib.jar这样的文件我必须使用默认包。所以我从下面的程序中删除了“package algs4”。但它没有用。
package algs4;
public class PercolationStats
{
//Some method declarations
public static void main(String[] args)
{
//Some code
for(int counter=0; counter<T; counter++)
{
while(!p.percolates())
{
iIndex = StdRandom.uniform(N);
jIndex = StdRandom.uniform(N);
...
}
}
}
每次我使用以下代码编译此程序时
javac -cp . algs4/PercolationStats.java
我收到错误:
algs4/PercolationStats.java:30: cannot find symbol
symbol : variable StdRandom
location: class algs4.PercolationStats
iIndex = StdRandom.uniform(N);
我还尝试使用:
进行编译javac -cp .:stdlib.jar algs4/PercolationStats.java
但错误仍然相同。
虽然这不是一个好习惯,但我也从.jar文件中提取了文件,它给了我StdRandom.java文件,但它仍然不起作用。
包括stdlib.jar在内的所有文件都在同一目录中。
我应该怎么做?
编辑:只是为了对未来的任何引用提出更详细的问题:程序中使用的stdlib.jar是在“默认”包中。
答案 0 :(得分:6)
编辑:如果StdRandom
不在包中,那么您可能确实需要从包中取出代码。 (我会试一试 - 这是很长一段时间以来我不得不使用一个不在包中的类。)
一般情况下,获得包含类的stdlib.jar
版本会更好 。
我们不知道包StdRandom
是什么。你可能只想要一个import
声明:
import foo.bar.StdRandom;
...其中foo.bar
是包含StdRandom
的包。或者,您可以使用通配符导入包中的所有类:
import foo.bar.*;
有关详细信息,请参阅Java教程的"Creating and using packages"部分。
你的类路径中肯定需要stdlib.jar
,所以坚持第二种编译方法。
您可能还想考虑使用IDE(例如Eclipse),它可以让您更轻松地完成所有这些操作,甚至可以按需处理导入语句。
答案 1 :(得分:0)
尝试使用
进行编译java -classpath "lib/*:." my.package.Program
或
java -cp "Test.jar:lib/*" my.package.MainClass