Java Can';无法正确设置类路径
我正在尝试编译以下代码:Java Can';无法正确设置类路径,java,classpath,javac,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++
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: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选项应该是什么样子?在
和标准输出中是什么?JDK中没有这样的类。你有系统输入和系统输出。请看地图
系统中没有readInts()
方法。也许您指的是您自己的一些自定义类
这样写,忘记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;
/**
*三和
*@author mduffy
*@自2012年8月14日下午1:53起
*@linkhttp://stackoverflow.com/questions/11950145/cant-correctly-setup-classpath#comment15924351_11950145
*/
公共类三和{
公共静态整数计数(整数[]a){
//计算总和为0的三倍数
整数计数=0;
对于(int i=0;i您没有在
和StdOut
变量中定义或导入。您应该这样做,因为编译器不知道它们在哪里,它们是什么。好的,我相信您有如下所示的目录结构
/src
-- week1
-- ThreeSum.java
/lib
-- stdlib.jar
其中src
包含类文件
$cd /src
$javac -cp ".:../lib/stdlib.jar" week1.ThreeSum.java
我想这对你有帮助
PS:如果您有某种根目录而不是src,那么在这种情况下,用根目录的名称替换src
javac-cp.:lib/stdlib.jar:week1 week1/ThreeSum.java
所以week1文件夹应该添加到-cp选项中。实际上我以前也遇到过同样的问题,然后我发现:
正如那篇文章的作者所说,问题在于stdlib.jar文件中的类不在包结构中。因此,如果您试图在代码中使用它们,就不应该在包结构中组织代码
我使用的是EclipseIDE,我将代码移到包外(然后代码将被放在“默认包”中)当然,stdlib.jar应该被添加到.classpath文件中。使用javac-cp.:/lib/stdlib.jar week1.ThreeSum.java并导入In和stdouty的包。你需要指定包名为In
type。类似于-com.abc的东西。
@Patton中stdlib.jar中没有包,只有java和类文件根目录。据我所知,我不应该导入它们。如果没有包,则不需要导入这些类。缺少包名本身就是包名。您运行的平台是什么?如果在windows上,则需要用“;”分隔类路径元素。正如他所写,它们来自提供的JAR(希望是;)。是的,但是也没有导入。它们必须在weeks包中。@duffymo stdlib.jar只是这个类的容器,里面没有包。在这种情况下导入应该是什么样子?这个例子来自普林斯顿算法书,代码eitherOk中没有导入,谢谢我们的帮助,但方法正确是将week1 older添加到-cp选项=)中,并且必须使用类文件的路径方式而不是包方式,这是在类路径的Oracles教程中编写的。
$cd /src
$javac -cp ".:../lib/stdlib.jar" week1.ThreeSum.java