Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法正确设置类路径_Java_Classpath_Javac - Fatal编程技术网

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