1. 下載
1.1 JDK
http://www.oracle.com/technetwork/java/javase/downloads/index.html
選擇“Windows x64 180.51 MB jdk-8u51-windows-x64.exe”下載。
1.2 Eclipse
http://www.eclipse.org/downloads/
選擇下載“Eclipse IDE for Java EE Developers”64位版(要與JDK的一致,JDK也是64位版)
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. 設置環境變量:開始->計算機->屬性->高級系統設置->環境變量,設置如下:
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%\bin
注意:如果要使用第三方的jre包,在CLASSPATH中務必要將路徑詳細到.jar,而不能使用目錄(如C:\java\jar\)來代表jar目錄中所有的jar包。
3. 測試javac
為測試Java編譯器(Java compiler)是否正常安裝,在cmd中輸入"javac -version"看是否正確輸出。
4. 測試java
為測試Java解釋器(Java interpreter)是否正常安裝,在cmd中輸入"java -version"看是否正確輸出。
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)