我是java的初学者,参加了由普林斯顿提供的课程 Algorithm 。在课程中,教授要求我们将 algs4.jar 下载到一个文件夹,并将 algs4.jar 添加到类路径中。[1]
我一步一步地按照它,尝试编写 HelloWorld 之类的
import edu.princeton.cs.algs4.StdOut;
public class HelloWorld {
public static void main(String args[]) {
StdOut.print("Hello World!");
}
}
然而,当我编译文件时,控制台提醒我
NPP_EXEC: "java_Compile_Run"
NPP_SAVE: G:\java\helloworld\HelloWorld.java
javac -encoding UTF-8 "G:\java\helloworld\HelloWorld.java"
Process started >>>
<<< Process finished. (Exit code 0)
==========编译成功后开始运行==========
java -cp "G:\java\helloworld" "HelloWorld"
Process started >>>
Exception in thread "main" java.lang.NoClassDefFoundError:
edu/princeton/cs/algs4/StdOut
at HelloWorld.main(HelloWorld.java:5)
Caused by: java.lang.ClassNotFoundException: edu.princeton.cs.algs4.StdOut
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
<<< Process finished. (Exit code 1)
================ READY ================
我已经检查了我的类路径和我的编程文件。这个错误是什么意思?我该如何解决?
任何建议都有帮助。谢谢。
答案 0 :(得分:5)
如果您指的是应该在类路径上的jar文件,则必须明确命名。例如。
java -cp "G:/java/helloworld;G:/whereever/algs4j.jar" HelloWorld
他们真的为System.out
提供了另一个名字吗?在这种情况下,您还可以使用System.out
代替StdOut
答案 1 :(得分:4)
您可能必须使用-cp
标志来设置类路径以包含该包。
使用-cp
标记时,请勿忘记使用.
因此,像javac -cp thejar.jar:.
这样的东西应该在linux中工作,或者javac -cp thejar.jar;.
应该适用于windows
答案 2 :(得分:4)
根据instructions of this course,您应该使用javac-algs4
进行编译,并在导入其库时执行java-algs4
。
如果您想了解这两个命令与原始命令javac
和java
之间的差异,您可以
type
命令查找此命令的位置cat
或vim
查看此命令的内容正如Olaf Kock所说,您可以看到java-algs4
为原始-cp
命令添加了java
参数。
答案 3 :(得分:1)
你在java代码中导入了类StdOut(导入edu.princeton.cs.algs4.StdOut;),你必须告诉java如何实现stdOut
收录您提供的链接(http://algs4.cs.princeton.edu/code/)。您必须遵循&#34;安装教科书库。&#34;首先安装此库。
答案 4 :(得分:1)
我只是在javac
和java
命令中包含了一个类路径参数,如下所示:
javac -classpath ".;drive\path\to\algs4.jar" Hello.java
和
java -classpath ".;drive\path\to\algs4.jar" Hello
此外,如果您手动添加CLASSPATH环境变量,请记住关闭并重新启动cmd控制台。