配置算法(第4版)的Java編譯環境

1. 下載

1.1 JDK

http://www.oracle.com/technetwork/java/javase/downloads/index.html
選擇「Windows x64 180.51 MB jdk-8u51-windows-x64.exe」下載。html

1.2 Eclipse

http://www.eclipse.org/downloads/
選擇下載「Eclipse IDE for Java EE Developers」64位版(要與JDK的一致,JDK也是64位版)java

2. 安裝JDK

1. 默認安裝路徑是「C:\Program Files\Java\jdk1.8.0_51\」,有人說安裝目錄不能帶空格,不然會出問題(不知是否爲真),將其改成「C:\Java\jdk1.8.0_51\」。
注意安裝JDK後,彈出安裝JRE的路徑,默認爲「C:\Program Files\Java\jre1.8.0_51\」,咱們在java目錄新建一個文件夾jre1.8.0_51,將其改成「C:\Java\jre1.8.0_51\」。算法

2. 設置環境變量:開始->計算機->屬性->高級系統設置->環境變量,設置以下:windows

JAVA_HOME(在System Variables下新建) C:\Java\jdk1.8.0_51
CLASSPATH(在System Variables下新建) .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
PATH ;%JAVA_HOME%\binoracle

注意:若是要使用第三方的jre包,在CLASSPATH中務必要將路徑詳細到.jar,而不能使用目錄(如C:\java\jar\)來表明jar目錄中全部的jar包。eclipse

3. 測試javac測試

爲測試Java編譯器(Java compiler)是否正常安裝,在cmd中輸入"javac -version"看是否正確輸出。ui

4. 測試java編碼

爲測試Java解釋器(Java interpreter)是否正常安裝,在cmd中輸入"java -version"看是否正確輸出。spa

5. 測試HelloWOrld

寫一個HelloWorld.java程序,編譯並運行,有可能會報下面的錯誤:

D:\TestJava>java HelloWorld
Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.8', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.

緣由是我之前安裝過JRE1.6。環境變量在找java.exe時,找到了之前JRE的環境變量去了。從「HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment」中能夠看到1.8和1.6共存。

解決的方法一是能夠將環境變量配置「%JAVA_HOME%\bin」移到PATH的最前面,這樣首先找到的java.exe將是JDK1.8的。

二是能夠在控制面板中將JRE1.6刪除(不用重啓)。

3. 安裝Eclipse

將Eclipse解壓。運行eclipse.exe便可。

3.1 設置插入tab轉換爲space【1】

1. 打開菜單window->preference,選擇 General->Editors->Text Editors,選中右側的 insert space for tabs,保存。

2. 打開菜單window->preference,選擇 java(或C++)->code style ->formatter,點擊右側的Edit...

3. 選則左側 tab policy的值爲spaces only,點擊「Apply」應用便可:

4. 若是出現「Apply」應用按鈕爲灰色的狀況,須要回到上一步,點擊「new」按鈕,根據當前的樣式(Eclipse[built-in])從新生成一個新的樣式(命名爲EclipseTab)並保存。

5. 而後對「EclipseTab」 profile 點擊「Edit...」,編輯該樣式,選則左側 tab policy的值爲spaces only,點擊「Apply」應用便可。

6. 回到Formatter界面後,點擊「Apply」,應用此「EclipseTab」樣式。

 4. 配置算法(第4版)的編譯環境

官網提供的algs4.exe會下載並安裝Java, DrJava, Checkstyle, Findbugs, and the textbook libraries。下載、安裝、配置一鍵完成。若是不想使用algs4.exe默認下載的JDK和DrJava IDE,咱們能夠如上面那樣手動安裝並配置好JDK和Eclipse,而後按如下的方法編譯程序。

注意:不使用algs4.exe的話,咱們須要導入的包爲stdlib-package.jar和algs4-package.jar,而不該該使用stdlib.jar和algs4.jar。緣由見【2】的QA。

Q. If I use a named package to structure my code, the compiler can no longer access the libraries in stdlib.jar or algs4.jar. Why not?
A. The libraries in stdlib.jar and algs4.jar are in the "default" package. In Java, you can't access classes in the default package from a named package. If you need to use our libraries with a named package, you can use these package versions: stdlib-package.jar and algs4-package.jar.

4.1 使用Eclipse編譯運行代碼

1. 咱們使用BinarySearch.java進行測試,BinarySearch中使用了StdIn,StdOut等stdlib的類,所以咱們須要在源碼中import導入這些庫。

import java.util.Arrays;
import edu.princeton.cs.introcs.In; // 導入stdlib庫
import edu.princeton.cs.introcs.StdIn; // 導入stdlib庫
import edu.princeton.cs.introcs.StdOut; // 導入stdlib庫

public class BinarySearch {

    private BinarySearch() { }

    public static int rank(int key, int[] a) {
        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 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 (rank(key, whitelist) == -1)
                StdOut.println(key);
        }
    }
}

2. StdIn,StdOut等類存在於stdlib-package.jar包中,但在Eclipse中是找不到stdlib-package.jar包的,因此咱們須要將jar包導入Eclipse工程中。【3】

在工程的Build Path下選擇Add External Archives 而後找到stdlib-package.jar和algs4-package.jar,添加它們就能夠了。

3. 在Eclipse編譯完後,如何運行呢?由於書上有不少程序都是經過輸入重定向來得到輸入的,好比:

java BinarySearch tinyW.txt < tinyT.txt

在Eclipse中不方便使用重定向,【3】中的解決辦法是:直接用Scanner類。不過我沒試過。我採用的辦法是在Eclipse編碼並編譯完成後,在命令行裏運行。

4.2 在命令行下編譯運行代碼

1. 因爲書上有不少程序都是經過輸入重定向來得到輸入的,所以使用命令行更容易操做。

2. 可是因爲咱們要使用stdlib-package.jar包中類,因此咱們編譯以及運行代碼時,都要指定jar包的參數。

3. 對於帶一個jar包的編譯:【4】

編譯:javac -cp C:\Java\jdk1.8.0_51\lib\stdlib-package.jar BinarySearch.java
運行1:java -cp C:\Java\jdk1.8.0_51\lib\stdlib-package.jar;%classpath% BinarySearch tinyW.txt < tinyT.txt
運行2:java -cp .;C:\Java\jdk1.8.0_51\lib\stdlib-package.jar BinarySearch tinyW.txt < tinyT.txt

若jar包在當前目錄的話,則編譯運行爲:

編譯:javac -cp .\stdlib-package.jar BinarySearch.java
運行:java -cp .\stdlib-package.jar;%classpath% BinarySearch

4. 對於帶多個jar包(在當前目錄的lib子目錄下)的編譯:【5】

(1)若是多個jar包文件在同一個子目錄下:(a)能夠指定子目錄;(b)使用通配符

指定子目錄:

編譯:javac -Djava.ext.dirs=.\lib BinarySearch.java

運行:java -Djava.ext.dirs=.\lib BinarySearch tinyW.txt < tinyT.txt

使用通配符:

編譯:javac .\lib\*.jar BinarySearch.java

運行:java .\lib\*.jar BinarySearch tinyW.txt < tinyT.txt

(2)若是多個jar包文件在不一樣的目錄下:可使用分號」;「分割

編譯:javac -Djava.ext.dirs=C:\Java\jdk1.8.0_51\lib\stdlib-package.jar;C:\Java\jdk1.8.0_51\lib\algs4-package.jar BinarySearch.java

運行:javac -Djava.ext.dirs=C:\Java\jdk1.8.0_51\lib\stdlib-package.jar;C:\Java\jdk1.8.0_51\lib\algs4-package.jar BinarySearch tinyW.txt < tinyT.txt 

參考資料

【1】設置Eclipse中的tab鍵爲4個空格的完整方法(http://my.oschina.net/xunxun10/blog/110074)

【2】http://algs4.cs.princeton.edu/code/

【3】算法 第4版 eclipse下環境搭建(http://blog.csdn.net/ChongErxoxo/article/details/42017577)

【4】java帶jar包的命令行運行(http://blog.sina.com.cn/s/blog_620b085d0100iwwt.html)

【5】java命令行編譯帶jar包(http://blog.csdn.net/ssergsw/article/details/9164699)

相關文章
相關標籤/搜索