2

这确实可能是一个非常简单的问题,但我对 Java 完全陌生,不知道如何解决它。

我有一个 stdlib.jar 文件,其中定义了一些像 StdRandom 这样的类,我必须在我的程序中使用它们。我读到,要使用像 stdlib.jar 这样的文件,我必须使用默认包。所以我从下面的程序中删除了“包 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 位于“默认”包中。

4

2 回答 2

6

编辑:如果StdRandom不在包中,那么您可能确实也需要将代码从包中取出。(我会试一试 - 自从我不得不使用不在包中的类以来已经有很长时间了。)

一般来说,获得一个在包中包含类的版本会好得多stdlib.jar


我们不知道里面有什么包StdRandom。你可能只想要一个import声明:

import foo.bar.StdRandom;

...foo.bar包含StdRandom. 或者,您可以使用通配符导入包中的所有类:

import foo.bar.*;

有关更多详细信息,请参阅 Java 教程的“创建和使用包”部分。

你肯定需要stdlib.jar在你的类路径中,所以坚持你的第二种编译方法。

您可能还想考虑使用 IDE(例如 Eclipse),它可以让您更轻松地完成所有这些工作,甚至可以根据需要制定导入语句。

于 2012-08-29T06:06:46.283 回答
0

尝试编译

java -classpath "lib/*:." my.package.Program

或者

java -cp "Test.jar:lib/*" my.package.MainClass

有关更多信息,请参阅在 java 类路径中设置多个 jar

于 2012-08-29T06:26:10.703 回答