我已经下载了两个罐子。我想导入一些包含的类。我该怎么做?
这是我的算法类。我已经尝试按照以下网站上的说明无效。
http://algs4.cs.princeton.edu/code/
有一个OSX的安装程序(我正在运行Mountain Lion)据称将jar添加到你的类路径中。不幸的是,它还安装了Java博士。我宁愿只使用Sublime和Terminal。我认为这很容易......
import java.stdlib;
在我的Percolation.java文件中,但是javac-ing该程序产生“package stdlib不存在”,
import stdlib;
我通过以下方式手动将stdlib.jar和algs4.jar的位置添加到终端CLASSPATH中:
export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar/algs4.jar:/Users/Michael/path/to/jar/algs4.jar
export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar/stdlib.jar:/Users/Michael/path/to/jar/stdlib.jar
我也尝试了
javac -cp $CLASSPATH:/Users/Michael/path/to/jar/algs4.jar:/Users/Michael/path/to/jar/stdlib.jar Percolation.java
但我还是得到了
javac Percolation.java
Percolation.java:1: cannot find symbol
symbol : class stdlib
location: package java
import java.stdlib;
^
Percolation.java:2: package java.algs4 does not exist
import java.algs4.WeightedQuickUnionUF;
^
这里发生了什么?
还有一种方法可以将这些值永久添加到OS X山狮的CLASSPATH中。我必须在每个新终端上执行该命令。
答案 0 :(得分:4)
如果您使用Terminal编译并启动程序,那么在终端窗口中,首先设置CLASSPATH
:
$ export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar1.jar:/Users/Michael/path/to/jar2.jar
然后您可以输入echo $CLASSPATH
并查看是否引用了jar。
现在,在同一个终端窗口中,使用javac编译你的类。如上所述设置CLASSPATH
仅适用于当前的终端窗口以及从其启动的任何进程。
或者,您可以将CLASSPATH
传递给javac:
$ javac -cp $CLASSPATH:/Users/Michael/path/to/jar1.jar:/Users/Michael/path/to/jar2.jar MyClass.java
要为将来的终端会话保留此CLASSPATH
,请将上面的export
行添加到主目录中的 .profile 文件中。
答案 1 :(得分:3)
回答这个问题已经过时了,但也许对普林斯顿算法课程的未来参与者有用。 在环境中添加CLASSPATH后,从包中获取类,但仍会在import命令中生成错误。您需要从源文件中删除import algs4和stdlib,编译将顺利运行。
此解决方案适用于带有zsh的Ubuntu 12.04。
答案 2 :(得分:2)
你可能有正确的类路径。您尝试导入的类可能不会被称为java.stdlib
。您需要导入完全限定的包名称...可能类似于org.somecompany.ourlibrary.stdlib
。因此你需要
import org.somecompany.ourlibrary.stdlib
在Percolations.java
文件的顶部,包含其余的import语句。
答案 3 :(得分:1)
您的Percolation程序是否包含在自己的包中?如果是这样,请尝试通过注释掉文件中的任何包语句并重新编译它来将其放入默认包中。
此外,algs4
包中的java
内没有任何内容,这是它自己独立的内容。
答案 4 :(得分:1)
如果您正在使用Eclipse(就像我一样),请选择当前项目,然后从菜单中打开项目属性。在左侧选择“Java Build path”,然后选择选项卡库。现在,您单击“添加外部罐子”按钮,然后指向您的jar文件,您就完成了。
祝你好运。答案 5 :(得分:0)
答案 6 :(得分:0)
我在本课程的工作中遇到了同样的问题,但对于Windows来说。我会留下这个评论,以防它对某人有所帮助。
如果您使用DrJava,则代码中不需要任何import
语句。如果您按照课程中描述的安装步骤操作,则会为您配置所有步骤。
但这可能是一个问题 - 它会将jar
个文件放在当前用户目录中,其路径可能包含不适当的符号(在我的情况下为俄语字母)。你需要在编辑 - >中检查它。首选项菜单。您可以看到algs4.jar
和stdlib.jar
路径。确保此路径正确并指向真实的现有文件。
我刚将所有必要的文件移动到另一个目录并更改了此菜单中的路径。它为我解决了这个问题。
答案 7 :(得分:0)
我浪费了很多时间导入类,尝试了“javac -cp。; stdlib.jar mad.java”等CL选项,但是用来得到你提到的同样的错误。
然后我完全注释掉了导入并确保DrJava的首选项添加了2个类路径+%CLASSPATH%变量以获得正确的值。现在只是工作。
祝你好运!
答案 8 :(得分:0)
只需将软件包命名为default,然后它就能正常工作。在此之后你不需要导入任何只是运行
中提供的一些代码Fundamentsls
一章
平均
答案 9 :(得分:0)
我的解决方案是在我的Sublime文本编辑器中添加2个新的构建系统:一个用于编译,另一个用于执行。使用Tools-> Build_system-> New_build_system ...从主菜单中使用这两个代码段:
用于编译(我已将文件命名为" algs-compile.sublime_build"):
{
"cmd": ["javac", "-cp", "/Users/admin/algs4/stdlib.jar:/Users/admin/algs4/algs4.jar:.", "$file"],
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.java"
}
用于跑步(" algs-run.sublime_build")
{
"cmd": ["java", "-cp", "/Users/admin/algs4/stdlib.jar:/Users/admin/algs4/algs4.jar:.", "$file_base_name"]
}
请勿忘记使用系统中正确的路径替换jar文件的路径。 我知道这个问题相当陈旧,但我希望这会对某人有所帮助。
答案 10 :(得分:0)
如果您收到“无法解析为某种类型”错误,并尝试添加stdlib.jar或algs4.jar文件,则可以使用以下解决方案:
stdlib.jar和algs4.jar中的库位于“默认”包中。在Java中,您无法从命名包访问默认包中的类。如果需要将库与命名包一起使用,则可以使用这些包版本:
stdlib-package.jar和algs4-package.jar。
您可以在此处下载这些文件: http://algs4.cs.princeton.edu/code/
然后你可以自动添加导入: import edu.princeton.cs.algs4.ClassName
答案 11 :(得分:0)
打开你的Sublime
选择工具 - >构建系统 - >新构建系统
将以下代码添加到新文件
这可以告诉sublime运行命令
{
"cmd": ["javac -cp /Users/yourusername/algs4/stdlib.jar:/Users/yourusername/algs4/algs4.jar:. \"$file\" && java -cp java -cp /Users/yourusername/algs4/stdlib.jar:/Users/yourusername/algs4/algs4.jar:. \"$file_base_name\""],
"shell":true,
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.java"
}
希望这可以帮助那些关注普林斯顿大学算法课程的人
答案 12 :(得分:0)
我有同样的问题。王仁飞的解决方案对我有用(我还没有足够的观点直接评论他的回答)。
在Sublime中,导航至Preferences: Browse Packages>JavaC.sublime_build
。
这就是我的样子:
{
"cmd": ["javac", "-cp", "/Users/jason/Documents/lib/*:./","$file"],
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.java"
}
/Users/jason/Documents/lib/*:/
让Sublime知道保存我的包的目录的位置,所以现在当我构建时,它首先加载这些包。