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

mvb*_*mvb 2 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);
            ...
        }
      }



} 
Run Code Online (Sandbox Code Playgroud)

每次我编译这个程序使用:

javac -cp . algs4/PercolationStats.java
Run Code Online (Sandbox Code Playgroud)

我收到错误:

algs4/PercolationStats.java:30: cannot find symbol
symbol  : variable StdRandom
location: class algs4.PercolationStats
                iIndex = StdRandom.uniform(N);
Run Code Online (Sandbox Code Playgroud)

我也尝试使用以下方法编译:

javac -cp .:stdlib.jar algs4/PercolationStats.java
Run Code Online (Sandbox Code Playgroud)

但错误仍然相同.

虽然这不是一个好习惯,但我也从.jar文件中提取了文件,它给了我StdRandom.java文件,但它仍然不起作用.

包括stdlib.jar在内的所有文件都在同一目录中.

我该怎么办呢?

编辑:只是为了使任何未来的引用更详细的问题:程序中使用的stdlib.jar是在"默认"包中.

Jon*_*eet 6

编辑:如果StdRandom不在一个包中,那么你可能确实需要从包中取出你的代码.(我会试一试 - 因为我不得不使用一个不在包中的类,所以很长一段时间.)

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


我们不知道包StdRandom是什么.你可能只想要一个import声明:

import foo.bar.StdRandom;
Run Code Online (Sandbox Code Playgroud)

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

import foo.bar.*;
Run Code Online (Sandbox Code Playgroud)

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

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

您可能还想考虑使用IDE(例如Eclipse),它可以使您更轻松地完成所有这些操作,甚至可以按需处理导入语句.