最近开始学习《算法 第四版》这本书,想着提高下自己的算法水平。可是书中P28页中运行二分查找算法的示例自己总是运行失败,网上找资料很多都不对,这里记录下我从失败到成功运行示例程序的踩坑实录。
废话不多说,直入主题。
这本书配套的网站内容很重要!!!跟着人家官网上进行操作,一般没有什么大问题。
为什么这么说,由于自己没仔细看官方文档,运行失败后乱百度,查资料找半天都没解决问题。其实人家官网上已经写的非常清楚了对应的操作系统该怎么操作,导致自己白白浪费很多时间。而且相关配套的算法最新版本代码(比如书上的二分查找和网站上给出的代码有些细微差别)和测试数据都在官网上。这是官网地址Java Algorithms and Clients (princeton.edu)
在网页下方说了各个操作系统该怎么配置环境。
我的电脑是windows操作系统,软件是idea,因为这些测试数据都是存到文件中的,使用命令来进行测试算法的。idea直接运行程序是不行的。idea中加jar包,我这里就不演示了,百度一下就能找到。
如果你运行程序不想配置classpath环境变量,则每次测试算法时就要加上classpath路径。
鼠标右键点击你写的程序所在的目录,选择open in terminal 。
强烈建议使用cmd而不是powershell. 因为当你执行测试算法的命令时powershell 解析 “<” 时会报错。
java ChapterOne.ItemOne.BinarySearch tinyAllowlist.txt < tinyText.txt
在settings里进行替换
如果是没有配置classpath环境变量编译代码, -cp 后面要有顿号和分号(英文的)跟着在官网上下载jar包
javac -cp .;D:\algs4.jar ChapterOne\ItemOne\BinarySearch.java
java -cp .;D:\algs4.jar ChapterOne.ItemOne.BinarySearch tinyAllowlist.txt < tinyText.txt
注意我是在src目录下,因为运行字节码程序要在src下,不然在其他目录会报错误: 找不到或无法加载主类 ChapterOne.ItemOne.BinarySearch
如果你要配置classpath,官网中也给出配置classpath步骤。
就像我下面这样配置。系统变量中没有就自己加一个。
注意后面跟着分号。
配置完别忘了点击三次确定。
win+r 输入cmd 打开cmd窗口 输入 echo %classpath% 看下是否和自己刚才配置的是不是一样。
好了重点来了,如果你之前没有配置过classpath,刚才在idea打开的terminal 中classpath是不生效的。建议你重新打开一个terminal进行算法测试。不要像我一样,明明配置好了classpath,测试算法还是失败,网上百度找问题找不到,白白浪费时间。
配置好classpath命令就不用每次输入 -cp 后面跟着的jar路径,建议还是配置好classpath环境变量。
测试数据文件不用放在src根目录下,放在其他目录测试也是可以的。