运行《算法》第四版的BinarySearch

首先:咱得有源代码和例子,这些从哪里来呢?

https://algs4.cs.princeton.edu/code/

点击上面的链接进入如下界面下载图中圈出的两个东西:

algs4.jar是整本书的程序的jar包,algs4-data.zip是本书中所有用例的压缩包。

至于还有个javadoc是帮助文档,可以不下。

至于有的博文提到的stdlib.jar是在https://algs4.cs.princeton.edu/11model/里面的,这个是本书封装的用于实现输入输出功能的jar包,包含在algs4.jar中。(所以也没必要下)


其次:下载并解压好了后(.jar在windows下可以用自带的rar解压),咱们就有algs4和algs4-data两个文件夹了。



我们可以在algs4文件夹下找到本书中的所有源程序(我是用del *.class把.class都删了)

在algs4-data文件夹下找到所有样例



下面就是如何运行BinarySearch.java

方法一

第一步:把algs4文件夹下的edu文件夹复制到一个文件夹中,再将BinarySearch.java所依赖的用例复制出来,放到同一目录下。BinarySearch.java所依赖的用例在文件最上面有说明。


注意上面的BinarySearch.java里面要作出如下修改:

  1. 删除package edu.princeton.cs.algs4;这一句
  2. 加上import edu.princeton.cs.algs4.*;这一句




第二步:打开命令行,移动到上图圈出的BinarySearch.java所在的文件夹

键入BinarySearch.java最上面的两个命令即可



这里的javac和java命令需要配置好环境变量,如果没有配置好又懒得配置的话,可以到jdk的bin目录下把java.exe和javac.exe复制到同一目录试试,就像下图这样。



此处有个小提醒:javac后面跟的参数是文件名,但java 后面跟的是类名



方法二

与方法一的区别在于使用了jar包

第一步:将algs4文件夹下的edu文件夹复制到一个文件夹中,再将algs4.jar复制到该文件夹下


ps.这个edu文件夹是由algs4.jar解压后得来的不经过任何处理的,有如下特征

  1. 含有pack那条语句
  2. 不含import edu.princeton.cs.algs4之类的


第二步:打开cmd,cd进入到BinarySearch.java的目录下,执行如下命令



这里涉及到的主要命令有:

//javac -cp jar包的绝对路径 .java文件         执行的文件夹为下图一
javac -cp E:\Algorithm-4th\jar\algs4.jar BinarySearch.java

//执行的文件夹为下图二   ps. 这里我和参考的不太一样,不知道为什么
java -cp E:\Algorithm-4th\jar\algs4.jar edu.princeton.cs.algs4.BinarySearch tinyW.txt < tinyT.txt




java与javac命令行的classpath选项可以看看:http://www.cnblogs.com/JeffChen/archive/2008/01/15/1039708.html


这里参考了

java带jar包的命令行的运行:http://blog.sina.com.cn/s/blog_620b085d0100iwwt.html

我是在http://www.cnblogs.com/zhcncn/p/4689225.html的参考资料里看到的sina的这条博文


找不到主类:java编译通过,为什么运行却提示找不到或无法加载主类? - 顾志方的回答 - 知乎https://www.zhihu.com/question/36537093/answer/206814470  

对于这个java命令https://blog.csdn.net/sxzlc/article/details/73744721讲的很清楚,比知乎的更形象


方法三

第一步:将algs文件夹下的所有程序复制到一个单独的文件夹里



第二步:在该文件夹下创建一个txt文件,里面键入

Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run "cmd /c dir /s/b *.java > list.java",vbHide
Wscript.Sleep 1000

sFile = "list.java"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = objFSO.OpenTextFile(sFile,1)
Do While Not oFile.AtEndOfStream
      strLine = oFile.ReadLine
      If Len(strLine) > 0 Then
            Set File = objFSO.OpenTextFile(strLine, 1)
            aryLines = File.ReadAll
            File.Close
            aryLines = Replace(aryLines, "package edu.princeton.cs.algs4;", "")
            Set File = objFSO.OpenTextFile(strLine, 2)
            File.Write aryLines
            File.Close
      End If
Loop
oFile.Close

objFSO.DeleteFile sFile
Set objFSO = Nothing

更改文件名为.vbs,双击运行



ps. 这一步的目的是去掉所有文件中的package edu.princeton.cs.algs4;这一句,可以使用其他方式实现。


第三步:把BinarySearch.java所依赖的用例导入到该目录下(我把本书所有用例都导了)



第四步:见方法一的第二步



总结

与java的类的作用域有关

涉及到package,可以看下https://blog.csdn.net/hittata/article/details/4231276这篇文章



本文参考了:

https://zhidao.baidu.com/question/119624330.html里的vb程序

https://blog.csdn.net/kazama_kenji/article/details/51607781


猜你喜欢

转载自blog.csdn.net/sinat_41104353/article/details/81028672