运行《算法》第四版的BinarySearch

目录

准备

方法一

方法二

方法三

总结


准备

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

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

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

运行《算法》第四版的BinarySearch_第1张图片

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

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

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

 

<2020-05-29 21:50> 现在来看看原来写的黑历史,其实 Java jar 就是为了方便使用第三方包而出现的,完全犯不着再解压一遍。下面讲一下过程:

 当前目录结构是:

E:.
│  algs4.jar
│  BinarySearch.java
│  stdlib.jar

├─algs4-data
│      tinyW.txt
│      tinyT.txt

在命令行中进行下面这两个步骤即可:

1. 使用 javac -cp ".;algs4.jar" BinarySearch.java 编译 BinarySearch.java。这里 -cp 是 -classpath 的简写,目的是让 javac 知道去哪里找到 BinarySearch.java 中使用的 In 等类。

2. 使用 java -cp ".;algs4.jar" edu.princeton.cs.algs4.BinarySearch algs4-data/tinyW.txt < algs4-data/tinyT.txt 运行编译好的字节码。其中加上 edu.princeton.cs.algs4 的原因是 BinarySearch.java 里有 package edu.princeton.cs.algs4; 这一行。

 

下面的其实就不用看了。

-------------------------------------

 

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

运行《算法》第四版的BinarySearch_第2张图片

 

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

运行《算法》第四版的BinarySearch_第3张图片

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

运行《算法》第四版的BinarySearch_第4张图片

 

下面就是如何运行BinarySearch.java

方法一

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

运行《算法》第四版的BinarySearch_第5张图片

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

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

运行《算法》第四版的BinarySearch_第6张图片

 

 

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

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

运行《算法》第四版的BinarySearch_第7张图片

 

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

运行《算法》第四版的BinarySearch_第8张图片

 

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

 

 

方法二

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

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

运行《算法》第四版的BinarySearch_第9张图片

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

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

 

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

运行《算法》第四版的BinarySearch_第10张图片

 

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

//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

 

运行《算法》第四版的BinarySearch_第11张图片

 

运行《算法》第四版的BinarySearch_第12张图片

 

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文件夹下的所有程序复制到一个单独的文件夹里

运行《算法》第四版的BinarySearch_第13张图片

 

第二步:在该文件夹下创建一个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,双击运行

运行《算法》第四版的BinarySearch_第14张图片

 

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

 

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

运行《算法》第四版的BinarySearch_第15张图片

 

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

运行《算法》第四版的BinarySearch_第16张图片

 

总结

与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

 

你可能感兴趣的:(#,算法)