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

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

    首先导入algs4.jar包:File-->Project Structure-->Modules-->Dependencies-->+

如何在Intellij Idea下编译运行《算法》里的程序?_第1张图片


然后正确编写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的同一目录下

如何在Intellij Idea下编译运行《算法》里的程序?_第2张图片



但是我在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中,就可以按正常的语法编译运行代码了。

错误的导入:

如何在Intellij Idea下编译运行《算法》里的程序?_第3张图片

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

如何在Intellij Idea下编译运行《算法》里的程序?_第4张图片

现在,在Terminal先进行编译:

如何在Intellij Idea下编译运行《算法》里的程序?_第5张图片

再运行:

如何在Intellij Idea下编译运行《算法》里的程序?_第6张图片

和书上的结果一致,Over~

你可能感兴趣的:(算法,第四版,Algotithms)