我正在尝试编译以下代码:
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选项应如何?
答案 0 :(得分:0)
什么是In
和StdOut
? 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)
您没有定义或导入In
和StdOut
变量。你应该这样做,因为编译器不知道它们在哪里和它们是什么。
答案 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
正如该段落的作者所说,问题是因为stdlib.jar文件中的类不在包结构中。所以如果你试图在你的代码中使用它们,你不应该在包结构中组织你的代码
我正在使用eclipse IDE,我将代码移到我的包之外(然后代码将放在'default package'中),然后它就可以了。当然stdlib.jar应该被添加到.classpath文件中。