即使类存在,也找不到符号

时间:2012-08-29 06:05:03

标签: java

这确实可能是一个非常简单的问题,但我对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是在“默认”包中。

2 个答案:

答案 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

请参阅Setting multiple jars in java classpath了解详情