无法正确设置类路径

时间:2012-08-14 10:14:30

标签: java classpath javac

我正在尝试编译以下代码:

package week1;

public class ThreeSum {
    public static int count(int[] a) {
        // count triples that sum to 0
        int count = 0;
        for (int i = 0; i<a.length; i++) {
            for (int j = i+1; j < a.length; j++) {
                for (int k = j+1; k < a.length; k++) {
                    if (a[i] + a[j] + a[k] == 0) {
                        count++;
                    }
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int[] a = In.readInts(args[0]);
        StdOut.println(count(a));
    }
}

此代码位于week1文件夹中的ThreeSum.java文件中。 “In”和“StdOut”这两个类都位于./lib文件夹中的stdlib.jar包中。 我一直使用IDE,现在决定使用命令行。所以我的

javac -cp .:lib/stdlib.jar week1/ThreeSum.java

和classpath参数的其他变体会返回错误:

week1\ThreeSum.java:20: error: cannot find symbol
        int[] a = In.readInts(args[0]);
                  ^
  symbol:   variable In
  location: class ThreeSum

week1\ThreeSum.java:21: error: cannot find symbol
        StdOut.println(count(a));
        ^
  symbol:   variable StdOut
  location: class ThreeSum

在我的情况下,正确的-cp选项应如何?

5 个答案:

答案 0 :(得分:0)

什么是InStdOut? JDK中没有这样的类。你有System.in和System.out。请参阅Java docs

readInts()上没有System.in方法。也许你的意思是你自己的一些自定义类。

像这样写,忘掉那个JAR依赖:

package week1;

/**
 * ThreeSum
 * @author mduffy
 * @since 8/14/12 1:53 PM
 * @link http://stackoverflow.com/questions/11950145/cant-correctly-setup-classpath#comment15924351_11950145
 */
public class ThreeSum {
    public static int count(int[] a) {
        // count triples that sum to 0
        int count = 0;
        for (int i = 0; i<a.length; i++) {
            for (int j = i+1; j < a.length; j++) {
                for (int k = j+1; k < a.length; k++) {
                    if (a[i] + a[j] + a[k] == 0) {
                        count++;
                    }
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int[] values = new int[args.length];
        int valuesCount = 0;
        for (String arg : args) {
            int value = Integer.valueOf(arg);
            values[valuesCount++] = value;
        }
        System.out.println(String.format("count: %d", count(values)));
    }
}

答案 1 :(得分:0)

您没有定义或导入InStdOut变量。你应该这样做,因为编译器不知道它们在哪里和它们是什么。

答案 2 :(得分:0)

好的我相信你有如下所示的目录结构

/src
    -- week1
          -- ThreeSum.java
/lib
    -- stdlib.jar

src包含类文件的位置。

$cd /src 
$javac -cp ".:../lib/stdlib.jar" week1.ThreeSum.java

我认为这有助于你!

PS:如果你有一些类型的根目录而不是src,那么在这种情况下用一个根目录的名称替换src

答案 3 :(得分:0)

好的,我编译了这个 javac -cp .: lib / stdlib.jar:week1 week1 / ThreeSum.java

所以应将week1文件夹添加到-cp选项。

答案 4 :(得分:0)

其实我以前遇到过同样的问题,然后我发现了这个:Problem with stdlib.jar

正如该段落的作者所说,问题是因为s​​tdlib.jar文件中的类不在包结构中。所以如果你试图在你的代码中使用它们,你不应该在包结构中组织你的代码

我正在使用eclipse IDE,我将代码移到我的包之外(然后代码将放在'default package'中),然后它就可以了。当然stdlib.jar应该被添加到.classpath文件中。