最近在看<算法 第四版>, 这本书是基于 Java 写的. 在配置 Java 环境的时候遇到一些问题. 由于之前没用过 Java, 所以来问一下到底是什么情况.
问题背景:
javac -version
输出的是javac 1.7.0_111
首先, 这本书的作者定义一些自己写的输入输出库, 在书的官网中给出了库文件algs4.jar. 我下载了库文件, 并且按照官网的说明, 讲文件放在了~/algs4/下面, 并且在.bashrc 中修改了 CLASSPATH 环境变量:
export CLASSPATH=$CLASSPATH:~/algs4/algs4.jar
然后试着编译运行一个书中一个简单的示例程序:
import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
import java.util.Arrays;
public class BinarySearch
{
public static int rank(int key, int[] a)
{
int lo = 0;
int hi = a.length - 1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (key < a[mid])
hi = mid - 1;
else if (key > a[mid])
lo = mid + 1;
else
return mid;
}
return -1;
}
public static void main(String[] args)
{
int[] whitelist = In.readInts(args[0]);
Arrays.sort(whitelist);
while (!StdIn.isEmpty()) {
int key = StdIn.readInt();
if (rank(key, whitelist) == -1)
StdOut.println(key);
}
}
}
其中用到了作者提供的几个函数: In, StdIn, StdOut. 但是我在编译的时候报错如下:
$ javac BinarySearch.java
注: BinarySearch.java 使用或覆盖了已过时的 API 。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
然后我按照提示添加了-Xlint:deprecation
选项, 再次编译:
$ javac BinarySearch.java -Xlint:deprecation
BinarySearch.java:26: 警告: [deprecation] In 中的 readInts(String)已过时
int[] whitelist = In.readInts(args[0]);
^
1 个警告
虽然提示警告但是仍然生成了BinarySearch.class
文件, 于是我试着运行了一下, 果然有问题:
$ java BinarySearch.class
错误: 找不到或无法加载主类 BinarySearch.class
这到底是什么问题呢? 是因为 JDK 太新了吗?
PS:我之前安装的是 JDK8, 后来出现了上面的问题, 然后我又换成了 JDK7, 但是问题依然存在.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.