algs4|macOS《算法》idea环境配置及重定位

如何在macOS使用idea运行算法第四版中的代码?

一、引

最近看在《算法》第四版,想测试一下书上的代码,但是书上的代码使用了自己的库,比如输入输出类,又并且想尝试一下10W个测试数据,折腾了一下。结果发现网上的教程要么无法复现要么系统不对要么软件不对。

系统:macOS 10.15.6 (19G73) idea jdk8

代码和数据在官网可以下载

二、使用

1.创建项目

正常创建

2.导入数据

algs4-data.zip解压放在src目录下(方便重定位指令,但是不美观,可以放在文件夹,指令自行改动)

algs4Data

3、导入algs4.jar

先将algs4.jar放入Java目录的EXtensions文件夹下: /Library/Java/Extensions/(位置不对无法编译)

idea中导入algs4.jar

文件–>项目结构( 快捷键com+; )

模块 --> 依赖 --> (添加) --> 选择 /Library/Java/Extensions/下的algs4.jar

(我测试的时候只要Java目录中有algs4.jar,不管添加存放在哪里的algs4.jar都可以,晕)

algs401In

成功添加后,记得确定:

algs402In

algs403In

成功导入后可以看到algs4.jar
注意:直接导入别的目录的也可以看到,但是编译会《找不到》

打开可以复制的代码到src目录下使用,但是注意package路径,且要import这本书自己的库

1
import edu.princeton.cs.algs4.*;

我的测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import edu.princeton.cs.algs4.*;
import java.util.Arrays;

public class 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;
}
@Deprecated
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[] allowlist = in.readAllInts();

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

// read integer key from standard input; print if not in allowlist
while (!StdIn.isEmpty()) {
int key = StdIn.readInt();
if (BinarySearch.indexOf(allowlist, key) == -1)
StdOut.println(key);
}
}
}

4.编译运行

idea终端运行,因为要使用重定向

cd到src目录 —> 编译代码 —> 运行代码

1
2
javac   BinarySearch.java  
java BinarySearch largeW.txt < largeT.txt

algs4Run

只要一直在输出数据就是运行成功了:

algs4Y

附录:

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

官网:算法第四版官网