您的位置:首页 > 其它

如何在Intellij Idea下编译运行《算法》里的程序?

2018-04-01 19:44 3915 查看
    最近下定决心,要把《算法》第四版认认真真刷一遍,IDE我用的是Intellij Idea。但是,刚一上手写书上的第一个代码BinarySearch.java,就出现问题了。因为要导入作者编写的algs4.jar包,老是出错。因为BinarySearch.java的运行牵涉到文件的重定向,在Eclipse中可以通过Configure来指定输入输出文件,但是在Idea中,我找了好久,也没找到类似指定输入输出文件的功能,最后我决定还是用Idea的Terminal来进行编译运行。
    首先导入algs4.jar包:File-->Project Structure-->Modules-->Dependencies-->+



然后正确编写BinarySearch.java代码: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 {

private BinarySearch() { }

public static int indexOf(int[] a, int key) {
int lo = 0;
int hi = a.length - 1;
while (lo <= hi) {
// Key is in a[lo..hi] or not present.
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 int rank(int key, int[] a) {
return indexOf(a, key);
}

public static void main(String[] args) {

// read the integers from a file
In in = new In(args[0]);
int[] whitelist = in.readAllInts();

// sort the array
Arrays.sort(whitelist);

// read integer key from standard input; print if not in whitelist
while (!StdIn.isEmpty()) {
int key = StdIn.readInt();
if (BinarySearch.indexOf(whitelist, key) == -1)
StdOut.println(key);
}
}
}
注意:tinyT.txt和tinyW.txt两个文件也放在和BinarySearch.java的同一目录下



但是我在Idea的Terminal下输入javac BinarySearch.java进行编译,发现出错,并打印如下信息:Leisure:src Leisure$ javac BinarySearch.java
BinarySearch.java:1: 错误: 程序包edu.princeton.cs.algs4不存在
import edu.princeton.cs.algs4.In;
^
BinarySearch.java:2: 错误: 程序包edu.princeton.cs.algs4不存在
import edu.princeton.cs.algs4.StdIn;
^
BinarySearch.java:3: 错误: 程序包edu.princeton.cs.algs4不存在
import edu.princeton.cs.algs4.StdOut;
^
BinarySearch.java:35: 错误: 找不到符号
In in = new In(args[0]);
^
符号: 类 In
位置: 类 BinarySearch
BinarySearch.java:35: 错误: 找不到符号
In in = new In(args[0]);
^
符号: 类 In
位置: 类 BinarySearch
BinarySearch.java:42: 错误: 找不到符号
while (!StdIn.isEmpty()) {
^
符号: 变量 StdIn
位置: 类 BinarySearch
BinarySearch.java:43: 错误: 找不到符号
int key = StdIn.readInt();
^
符号: 变量 StdIn
位置: 类 BinarySearch
BinarySearch.java:45: 错误: 找不到符号
StdOut.println(key);
^
符号: 变量 StdOut
位置: 类 BinarySearch
8 个错误

我疑惑了好久,因为我已经正确导入了Jar包,在Idea的Project下的External Libraries目录,也显示了algs4.jar文件,但为什么出现错误"找不到程序包edu.princeton.cs.algs4"这个错误呢?
我查了官网资料,发现algs4.jar的存放位置不对,那么正确的姿势是什么样子的呢?请看下面截图


原来,我没有将algs4.jar放入正确的目录,我的电脑是Mac,此时将algs4.jar放入安装JDK时Java目录的Extensions文件下,此时再导入到Idea中,就可以按正常的语法编译运行代码了。
错误的导入:



正确的导入:(注意algs4.jar文件的位置)



现在,在Terminal先进行编译:



再运行:



和书上的结果一致,Over~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: