1

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

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

和其他类路径参数变体它返回错误:

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 选项应该是什么样子?

4

5 回答 5

0

In和是什么StdOut?JDK 中没有这样的类。您确实有 System.in 和 System.out。请参阅Java 文档

上没有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)));
    }
}
于 2012-08-14T10:17:05.843 回答
0

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

于 2012-08-14T10:17:44.053 回答
0

好的,我相信您的目录结构如下所示

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

其中src包含类文件。

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

我想这对你有帮助!

PS:如果您有某种根目录而不是 src,那么在这种情况下,将 src 替换为根目录的名称

于 2012-08-14T11:08:59.837 回答
0

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

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

于 2012-08-14T11:37:13.457 回答
0

其实我之前也遇到过同样的问题,然后我发现了这个:Stdlib.jar的问题

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

我正在使用 Eclipse IDE 并将我的代码移到我的包之外(然后代码将放在“默认包”中),然后它就可以工作了。当然,stdlib.jar 应该添加到 .classpath 文件中。

于 2012-08-15T13:00:27.780 回答