Java語言入門教程
引言
您有沒有想過計算機程序是怎樣工作的?您是否曾經想學習編寫自己的計算機程序?無論您是想自己寫出游戲程序的14歲孩子,還是對計算機編程已經好奇了20年的70歲老人,這篇文章都適合您。在本文中,我將通過教您用Java程序設計語言編程使您了解計算機程序的原理。
在講授計算機編程的知識之前,我首先做如下假設:
- 我假設您目前對計算機編程一無所知。如果您已經懂一些編程知識的話那么本文的開始部分對您來說就會顯得十分簡單。盡可放心跳過這些章節,從新知識處開始學習。
- 我假設您對計算機的使用有一些了解。具體說就是我假設您已經知道如何編輯、復制、刪除和重命名文件,以及如何獲取有關您的系統的信息等等。
- 為簡單起見,我假設您的機器運行Windows95、98、2000、NT或XP操作系統。使用其他操作系統的用戶將這里學到的概念運用到自己的系統中應該也是比較容易的。
- 我假設您有學習的欲望。
進行Java編程需要的所有工具都可以輕松在網上免費獲得。網上還有大量的Java學習資料,所以學完本文以后您可以很容易去學習更多內容以繼續提高水平。在這里學習的Java編程在編譯器、開發環境、閱讀材料等等上沒有任何花銷。學會了Java再學習其他的語言就變得容易了,所以這里是個不錯的起點。
交待完這些事情,我們就準備好了。讓我們開始吧!
編程術語
記住,我假定您不懂編程。下面是一些術語,它們將有助于您的理解:
- 計算機程序——計算機程序是一組指令,告訴計算機應該怎么做。指令可以告訴計算機將幾個數相加,或比較兩個數字并根據比較的結果作出決定,如此之類。計算機程序只是面向計算機的一組指令而已,正如菜譜是廚師的指令,樂譜是樂師的指令一樣。計算機準確地執行這些指令的同時也就完成了有用的工作,如計算支票簿收支,或者在屏幕上顯示一個游戲,或運行一個字處理程序。
- 編程語言——為了能使計算機辨識您給它的指令,這些指令需要以一種計算機能夠理解的語言書寫,即編程語言。有很多計算機編程語言:Fortran、Cobol、Basic、Pascal、C、C++、Java、Perl,正如有很多人類語言一樣。它們都是用不同的方式來表達類似的概念。
- 編譯器——使用人可以閱讀的編程語言(如Java)寫好程序后,還要用編譯器將其翻譯成計算機可執行的形式。您很可能在您的計算機上見到過EXE文件。這些EXE文件就是編譯器輸出的結果。它們是可執行文件——從人可讀的程序翻譯而成的機器可讀的程序。
使用Java語言編程就需要一個Java編譯器。下一節將指導您下載并安裝一個編譯器。一旦有了編譯器我們就可以開始學習編程了。下載和安裝過程將會持續幾個小時,大部分時間用來下載幾個很大的文件。您還需要有大約40兆字節的空閑磁盤空間(開始前請確定有足夠的空間)。
下載Java編譯器
為了在您的機器上配置起一個Java開發環境——您將使用一個“開發環境”來“開發”(編寫)程序——您需要完成以下這些步驟:
- 下載一個包含Java開發環境(編譯器和其他工具)的大文件。
- 下載一個包含Java文檔的大文件。
- 如果您的機器上還沒有安裝WinZip(或可執行相同功能的程序),那么您需要下載一個包含WinZip的大文件并安裝之。
- 安裝Java開發環境。
- 安裝文檔。
- 調整環境變量。
- 全面測試。
為了方便,開始前最好在您的臨時目錄中創建一個新目錄用于保存將要下載的文件。我們將它稱為下載目錄。
步驟1——下載Java開發環境
進入網頁http://java.sun.com/j2se/1.4.2/download.html。點擊“下載J2SE SDK”鏈接下載SDK(軟件開發工具包)軟件。網頁會顯示一個許可協議。點擊“接受”。選擇您的操作系統,然后將文件保存到下載目錄中。這是一個巨大的文件,用電話調制解調器下載需要好幾個小時。接下來的兩個文件也很大。
步驟2——下載Java文檔
選擇操作系統后點擊SDK1.4.1文檔的鏈接。
步驟3——下載并安裝WinZip
如果您的機器上沒有安裝某個的版本的WinZip或其他解壓縮軟件,請到網頁http://www.winzip.com/上下載WinZip的試用版。運行EXE文件安裝。很快我們將使用它來安裝文檔。
步驟4——安裝開發工具包
運行第一步下載的j2sdk-1_4_1-*.exe文件。他將自動解壓并安裝開發工具包。
步驟5——安裝文檔
閱讀安裝說明文檔。它會要求您將文檔文件移至剛才開發工具包的安裝目錄。將文檔解壓縮,文件就會被安排到適當的位置。
步驟6——調整環境變量
按照此頁的要求,您需要改變路徑變量。最簡單的辦法是打開一個MS-DOS窗口鍵入PATH看看當前的路徑變量是什么,然后用記事本打開autoexec.bat按要求修改PATH環境變量。
步驟7——測試
現在您應該可以打開另一個MS-DOS窗口并鍵入javac了。如果一切設置妥當,那么您將看到屏幕將輸出兩行文字告訴您如何使用javac。這意味著一切已經準備就緒了。如果您看到“錯誤的命令或文件名”這條消息,則說明還沒有準備好。請重新閱讀安裝說明檢查哪里出了問題。確定PATH被正確設置并可用。回頭重新閱讀上面的步驟,問題不解決不要輕易放棄。
現在您已自豪地擁有一臺能夠編譯Java程序的機器了。您已經準備好開始編寫軟件了!
順便指出,剛才您解壓縮的內容包括一個demo(演示)目錄,其中包含許多精致的例子。所有的例子都可以立即執行,所以您不妨找到這個目錄試運行一下其中的某些例子。許多例子都會發聲,所以請打開揚聲器。要運行例子,找到名如example1.html的網頁文件并使用您常用的瀏覽器打開即可。
示例:創建一則簡單java程序
您的第一個程序將是小巧可愛的。它將建立一個繪圖區域并在其上繪制一條對角線。創建此程序您需要:
- 打開記事本鍵入(或復制粘貼)程序
- 保存程序
- 使用Java編譯器編譯程序生成一個Java程序
- 排除問題
- 建立一個HTML網頁“包含”剛創建的Java程序
- 運行Java程序
這里是本節的示范程序:
import java.awt.Graphics;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
g.drawLine(0, 0, 200, 200);
}
}
步驟1——錄入程序
建立一個新目錄以保存程序。打開記事本(或其他可以創建TXT文件的文本編輯器)。將范例程序錄入或復制粘貼到記事本窗口中。切記:輸入程序的大小寫敏感。因此必須按照范例程序中字母的大小寫輸入。重審以上編程步驟。如果錄入內容和范例程序不是完全一致,則程序將無法正常運行。
步驟2——保存文件
將文件在第一步創建的路徑下保存,文件名為FirstApplet.java。文件名大小寫敏感。請確保字母“F”和“A”大寫,其他字母小寫,如前所示。
步驟3——編譯程序
打開一個MS-DOS窗口。改變至包含FirstApplet.java的路徑下(cd),鍵入:
javac FirstApplet.java
記住大小寫敏感!或者編譯成功,這時屏幕不輸出任何信息,或者有錯誤發生。若沒有錯誤,則會在目錄里生成一個名為FirstApplet.class的文件與FirstApplet.java并列。
(請確保程序保存的文件名為FirstApplet.java而不是FirstApplet.java.txt。最簡單的辦法就是在MS-DOS窗口下鍵入dir然后查看文件名。若擴展名是.txt 則請重命名文件去掉此擴展名。也可以運行Windows資源管理器在“查看”菜單下點擊“選項”。確保“隱藏已注冊的MS-DOS文件擴展名”選項處于未選中狀態,然后在資源管理器中查看文件名。若需要則將文件改名。)
步驟4——排除問題
若有問題產生則想辦法解決。將您的程序與上面的范例程序對比,使之完全相同。修改過程中不斷編譯程序,直到沒有錯誤發生。若javac似乎不能工作,請回頭參照上節內容檢修安裝的問題。
步驟5——建立HTML頁面
創建一個HTML頁面來包含小程序。另開一個記事本窗口。錄入下面的內容:
將此文件存于同一目錄中,文件名為applet.htm。
步驟6——運行程序
在您的MS-DOS窗口中鍵入:
appletviewer applet.htm
應該可以看見一條從左上角到右下角的對角線:
|
將小程序查看器的窗口拉大一些以查看整條對角線。您也可以將此HTML網頁裝載到任何現用的瀏覽器中,如Netscape Navigator或微軟IE,看到的結果是大致相同的。
至此您已經成功創建了您的第一個程序!
Java程序解析
那么剛才您到底都做了些什么呢?首先,您編寫了一個極其簡單的Java程序。該程序是能在網絡瀏覽器中運行的Java程序,它和能在您的機器上獨立運行的Java應用程序不同。(Java應用程序稍微復雜一些,而且也不如小程序流行,所以我們從小程序開始。)然后我們使用javac編譯了這個小程序。接著我們創建了一個極其簡單的網頁來“包含”這個小程序。最后我們用appletviewer運行了小程序,當然您也可以方便地使用瀏覽器運行。
程序本身約有10行:
import java.awt.Graphics;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
g.drawLine(0, 0, 200, 200);
}
}
這大概是您能創建的最簡單的Java小程序了。要完全理解此程序您需要學習很多知識,尤其是在面向對象編程技術的方面。既然我假定您毫無編程經驗,因此我請您將注意力暫時集中到程序中的一行上:
g.drawLine(0, 0, 200, 200);
本程序的工作就是這一行完成的。它畫出對角線。程序的其他部分都是為這行而做的準備工作,我們可以暫時忽略這些準備工作。這行代碼告訴計算機從左上角(0,0)到右下角(200, 200)畫一條線。然后計算機就按照我們的指令畫線。這就是計算機編程的基本要素了!
(還要注意的是,在上面的第五步我們將HTML頁面中小程序的窗口設置為寬200高200。)
本程序中我們調用了一個drawLine方法(或稱函數),并且傳入了四個參數(0, 0, 200, 200)。該行以一個分號結束。分號的作用相當于句子結尾的句號。該行開始處的g.說明我們調用的是特定對象g的方法drawLine(該行再上面一行表明g是屬于Graphics類的對象——我們將在本文后面具體介紹類和類的方法)。
方法就是一條命令,它告訴計算機完成某件事情。本例中的drawLine告訴計算機在指定的兩點(0, 0)和(200, 200)之間畫一條線。您可以認為窗口的原點(0,0)位于左上角,X和Y軸的正向分別指向原點右側和下側。屏幕上一個點(像素)就是數軸上的一個單位。
|
試著用不同數字代替四個參數。改變一兩個參數,保存修改,然后用javac重新編譯并用appletviewer重新運行每次修改的結果。看看您能發現什么。
除了drawLine還有什么其他函數呢?可以通過查閱Graphics類的文檔來獲得信息。在您安裝Java開發工具包并將文檔文件解壓縮的過程中,一個名為java.awt.Graphics.html的文件就被安裝到了您的機器上。此文件即是Graphics類的說明文檔。這個文件在我的機器上的具體路徑是D:jdk1.1.7docsapijava.awt.Graphics.html。在您機器上這個路徑很可能會略有不同,但基本相似,這取決于您安裝的具體位置。找到此文件并打開。文件的開始部分有一節叫做“方法索引”。它列出了這個類支持的所有方法。drawLine方法是其中之一,但是還有許多別的方法。您可以畫出的內容包括但不限于:
- 直線
- 圓弧
- 橢圓
- 多邊形
- 矩形
- 字符串
- 字符
請閱讀這些不同方法的說明并加以試驗,從中發現您可以用它們做什么。例如,試試下面的代碼:
g.drawLine(0, 0, 200, 200);
g.drawRect(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);
它將畫出一個有兩條對角線的方框(別忘將窗口拉大以查看全圖)。試著畫一些其他圖形。閱讀文檔并嘗試使用setColor方法改變顏色。例如:
import java.awt.Graphics;
import java.awt.Color;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillRect(0, 0, 200, 200);
g.setColor(Color.black);
g.drawLine(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);
}
}
注意程序的第二行增添了import語句。程序運行的結果如下:
|
現在您可能在想:“他怎么知道要用Color.red而不是簡單的red,他又是怎么知道要增添第二個import行的呢?”這是通過例子學來的。因為我剛向您展示了一個調用setColor方法的例子,所以您現在知道了要改變顏色就用Color.后接顏色的名字作為setColor方法的參數,并且要在程序開始處添加適當的import語句。如果您查閱setColor的文檔,可以通過一個鏈接查詢到Color類的信息,其中包括一個所有可用顏色名字的列表,還有關于創建新(無名)的顏色的技巧的說明。您閱讀到這些信息,將它們記在腦子里,就知道如何用Java改變顏色了。這是作為程序員的關鍵:學習技巧并記住為寫下一個程序使用。您或者通過例子(如本文中的)學習這些技巧,或者通過閱讀說明文檔,或者通過察看示例代碼(如在demo路徑下的那些)。如果您有一個喜歡發現、學習和記憶的大腦,那么您一定會愛上編程的!
本節中,您學習了如何編寫線性、順序執行的代碼:從開始直到結束都由方法調用組成的代碼快。(試試在畫紅色矩形之前畫出直線——它會被矩形覆蓋掉成為不可見的。代碼行的順序很重要。)順序代碼構成了所有計算機程序的基本核心。嘗試一下所有不同的繪制方法,看看您有什么發現。
程序缺陷及調試
學習編程的過程中您會注意到自己總是會犯許多錯誤,或者想當然做出一些錯誤的假定,這都會使程序:1)無法通過編譯,或者2)執行時得出奇怪的結果。程序的這些問題稱為程序缺陷(我們常說的bug),而排除它們的過程稱為調試。任何程序員約有一半的時間都花在調試程序上。
您有的是時間和機會制造自己的程序缺陷,但為了使我們對可能出現的各種錯誤更加熟悉一些,現在讓我們人為制造一些程序缺陷。試著刪除您的程序中某行結尾的分號,然后用javac編譯。編譯器會給出一條錯誤消息。這叫做編譯錯誤。您必須排除所有的編譯錯誤才能執行程序。試著將一個函數的名字寫錯,或者忽略一個“{”不寫,或者刪掉一行import語句等等,這些可以讓您熟悉許多種編譯錯誤消息。初次看到某種類型的編譯錯誤時您可能很是煩惱,但是經過上面這樣用故意造成的已知錯誤多次試驗以后,您就會熟悉許多常見錯誤了。
程序缺陷還包括執行(或運行時)錯誤,發生于程序可以通過編譯,但是在運行的時候不能給出預想的輸出的情況。例如,下面代碼將繪制一個帶兩條交叉對角線的紅色矩形:
g.setColor(Color.red);
g.fillRect(0, 0, 200, 200);
g.setColor(Color.black);
g.drawLine(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);
但是下面的代碼只能產生紅色的矩形(兩條直線被它覆蓋了):
g.setColor(Color.black);
g.drawLine(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);
g.setColor(Color.red);
g.fillRect(0, 0, 200, 200);
兩段代碼幾乎完全一樣,但是執行后產生的結果卻大不相同。如果您希望看到兩條對角線,則第二段代碼就包含了一個缺陷。
這里是另一個例子:
g.drawLine(0, 0, 200, 200);
g.drawRect(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);
上面的代碼生成一個具有黑色輪廓線和兩條對角線的方框。而下面這段代碼只產生一條對角線:
g.drawLine(0, 0, 200, 200);
g.drawRect(0, 0, 200, 200);
g.drawLine(0, 200, 0, 200);
同樣,如果您希望看到兩條對角線,則第二段代碼包含一個缺陷(請查看第二段代碼找出錯誤)。這類錯誤因其隱蔽性可能需要花很多時間才能找到。
您將有充裕的時間練習查找自己程序中的缺陷。程序員平均要花大約一半的時間進行程序缺陷的排查。程序發生缺陷錯誤的時候不要灰心——它們是程序員編程生涯的一個正常的組成部分。
變量
所有的程序都使用變量臨時存儲各種數據。例如,當程序運行到某個階段時請求用戶輸入一個數字,則您要用一個變量存儲輸入數據供以后使用。
變量必須在程序中被定義(或聲明)后才能使用,您必須為每個變量確定一個具體類型。例如,您可能聲明某變量為保存數字的類型,又聲明另一個變量為保存人名的類型。(因為Java要求在使用變量前顯式定義變量并聲明變量值的類型,所以Java被稱為是一個強類型的語言。有些語言則沒有這些要求。一般說來,在創建大型程序時,強類型有助于減少程序錯誤。)
import java.awt.Graphics;
import java.awt.Color;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
int width = 200;
int height = 200;
g.drawRect(0, 0, width, height);
g.drawLine(0, 0, width, height);
g.drawLine(width, 0, 0, height);
}
}
這個程序中我們聲明了兩個名為width和height的變量。我們將其類型聲明為int。一個int型的變量可以保存一個整數(如1、2、3等)。我們將兩個變量都初始化為200。我們也完全可以這樣寫:
int width;
width = 200;
int height;
height = 200;
第一種形式只是輸入起來稍快一些。
將變量賦予初值的過程稱為初始化變量。一種常見的程序錯誤是忘記初始化變量。為重現此錯誤,試刪除代碼的初始化部分(“= 200”)然后重新編譯程序觀察后果。您會看到編譯器將發現這個問題。順便指出,這是編譯器的一個非常好的特性。它將為您節省許多時間。
Java支持兩種變量:簡單(初級)變量和類。
int是簡單變量的類型。這種變量可以保存一個數字,此外別無他長。您只要聲明一個int變量,設置它為某個值后使用即可。另一方面,類可以包含多個成員和方法,這些方法能簡化類的使用。一個易于理解的類的好例子就是Rectangle類,讓我們從它開始。
我們一直使用的那個程序有一個局限:他總是假定窗口大小是200乘200像素。為什么我們不問問窗口“您的尺寸有多大?”,然后據此調整我們的矩形和對角線的大小呢?如果您回頭查看Graphics 類的說明文檔(java.awt.Graphics.html——那個列出了所有可用的繪圖函數的文件),您會發現其中有一個叫做getClipBounds的函數。點擊此函數名瀏覽它的完整說明。這個函數沒有參數但是會返回一個Rectangle類型的值。返回的矩形包含了繪圖區的寬度和高度。若在此文檔頁面中點擊Rectangle就會被轉到Rectangle類(java.awt.Graphics.html)的文檔頁面。查看頁首的變量索引您會發現這個類包含四個名字分別為x、y、width和height的變量。因此我們將要做的就是用getClipBounds得到代表畫板邊界的矩形,然后從這個矩形中提取寬度和高度數據,將它們保存在前一個例子中創建的width和height變量中,如下所示:
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Rectangle;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
int width;
int height;
Rectangle r;
r = g.getClipBounds();
width = r.width - 1;
height = r.height - 1;
g.drawRect(0, 0, width, height);
g.drawLine(0, 0, width, height);
g.drawLine(width, 0, 0, height);
}
}
當運行上面程序的時候您會發現矩形和對角線恰好充滿繪圖區域。而且改變窗口大小時矩形和對角線還會自動重畫適應新的窗口大小。這段代碼引入了五個新概念,讓我看一看:
- 首先,因為我們使用了Rectangle類,所以要在程序的第三行引進 java.awt.Rectangle。
- 我們在本程序中聲明了三個變量:兩個(width和height)int型的,一個(r)Rectangle 型的。
- 我們使用了getClipBounds函數獲得繪圖區域的大小。此函數沒有參數所以我們也就不傳入參數(使用“()”),但是它返回一個Rectangle。我們寫下的代碼“r = g.getClipBounds();”其意思是說:“請將返回的矩形賦值給變量 r。”
- 變量r是Rectangle類型的,它其實包含四個變量:x、y、width和height(通過閱讀Rectangle類的說明文檔可以知道這些變量名)。要訪問它們需使用“.”(點)操作符。因此表達式“r.width”的意思就是“從變量 r 中取出名為width的變量”。這個值被保存到我們的名為width的局部變量中。在此過程中我們減去了一個1。試試不做減法會是什么結果。再試試減去五會是什么結果。
- 最后,我們在繪圖函數中使用了width和height。
學到這里常常提出的一個問題就是:“我們真有必要聲明width和height變量嗎?”答案是否定的。我們可以在繪圖函數參數的位置直接輸入r.width - 1。創建變量只是為了使程序更容易閱讀,因此這是一個應該養成的好習慣。
Java支持多種簡單變量類型。三種最常見的類型是:
- int——整型數值(1、2、3……)
- float——十進制小數(如 3.14159)
- char——字符值(a、b、c……)
可以用簡單類型進行數學運算。Java能夠識別 +(加)、-(減)、*(乘)、/(除)和幾種其他的運算。這里有一個在程序中使用這些運算符的例子。假設您要計算一個半徑為3米的圓球的體積。可用下面的代碼完成:
float diameter = 10;
float radius;
float volume;
radius = diameter / 2.0;
volume = 4.0 / 3.0 * 3.14159 * radius * radius * radius;
第一行運算的意義是:“將diameter變量的值除以2.0,結果保存在radius變量中。”可見“=”符號在這里的意義就是:“將右側計算的結果保存到左側的變量之中。”
如何使一個順序代碼塊重復地執行
計算機尤其擅長的工作之一就是進行重復的計算或操作。在前面的幾節中我們看到了如何編寫“順序代碼塊”,所以下面我們將討論如何使一個順序代碼塊重復地執行。
例如,我讓您畫出下面的圖形:
|
不妨先畫出所有的水平線,像這樣:
|
繪制這些線的一種方法是編寫一個順序代碼塊:
import java.awt.Graphics;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
int y;
y = 10;
g.drawLine(10, y, 210, y);
y = y + 25;
g.drawLine(10, y, 210, y);
y = y + 25;
g.drawLine(10, y, 210, y);
y = y + 25;
g.drawLine(10, y, 210, y);
y = y + 25;
g.drawLine(10, y, 210, y);
y = y + 25;
g.drawLine(10, y, 210, y);
y = y + 25;
g.drawLine(10, y, 210, y);
y = y + 25;
g.drawLine(10, y, 210, y);
y = y + 25;
g.drawLine(10, y, 210, y);
}
}
(對于一些新程序員來說,“y = y + 25;”這條語句初看起來很奇怪。它的意思是說:“將變量y當前的值加上25,結果仍存回到y。”因此如果在該行執行之前y的值是10,則該行執行后y的值將立即變成35。)
看過以上代碼的多數人會立刻注意到有兩行代碼被一遍遍重復了。在我們這個特例中,重復現象還不是很嚴重。但可以想像如果需要繪制包含上千個行和列的網格時,用這種方法編程將會是多么勞累。解決此問題的辦法就是循環,如下所示:
import java.awt.Graphics;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
int y;
y = 10;
while (y <= 210)
{
g.drawLine(10, y, 210, y);
y = y + 25;
}
}
}
運行程序時您會看到它會繪制九條200像素長的水平線。
while語句是Java中的一種循環語句。該語句告訴Java按照如下方式工作:執行到while語句時,Java查看括號中的表達式后判斷:“y是否小于等于210?”
- 如果答案是肯定的,Java將進入用花括號({})包圍的代碼塊。循環發生在代碼塊的結尾處。當Java執行到結尾的花括號時就返回到前面的while語句處回答同樣的問題。這種循環過程可能要進行許多次。
- 如果答案是否定的,Java將跳過用花括號包圍的代碼塊繼續執行。
因此您可以看到,程序開始運行時y的初值是10。10小于210,所以Java進入花括號代碼塊,繪制從(10,10)到(210, 10)的直線,將y設為35,然后回溯到while語句。35小于210,所以Java進入花括號代碼塊,繪制從(10,35)到(210, 35)的直線,將y設為60,然后回溯到while語句。此過程一直重復直到y終于超過了210,然后程序結束。
在程序中加入第二個循環即可完成網格的繪制,如下所示:
import java.awt.Graphics;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
int x, y;
y = 10;
while (y <= 210)
{
g.drawLine(10, y, 210, y);
y = y + 25;
}
x = 10;
while (x <= 210)
{
g.drawLine(x, 10, x, 210);
x = x + 25;
}
}
}
可見一個while語句包含三部分:
- 一個初始化步驟,將y設為10。
- 一個求值步驟,在while語句的括號中。
- while語句的某處會有一個增量步驟,遞增y的值。
Java支持另一種比while語句更為緊湊的方式完成同樣的工作。這就是for語句。如果您有如下的while語句:
y = 10;
while (y <= 210)
{
g.drawLine(10, y, 210, y);
y = y + 25;
}
那么等價的for語句看起來就是這樣子:
for (y = 10; y <= 210; y = y + 25)
{
g.drawLine(10, y, 210, y);
}
可見for語句的全部工作是將初始化、求值和增量步驟精簡到一個短行之中。它只是縮短了您編寫代碼的長度,僅此而已。
關于循環順便提出下面兩點值得注意的地方:
- 許多情況下將y初始化為210然后在循環中每次遞減25同樣是很容易的。求值部分的問題將變為:“y是否大于等于10?”您可以選擇兩種方法中的任何一種。多數人覺得用加法比用減法更舒服一些。但您可能有不同的感覺。
- 增量步驟十分重要。假如您無意間漏寫了循環中“y=y+25;”這行,于是y的值將不會改變——它總是等于10。因此它永遠不會超過210,循環也就會無限地進行下去(直到你關閉計算機或程序窗口時才停止)。這種情況稱為無限循環,是一種常見的編程錯誤。
作為循環的練習,試編寫代碼繪制下面的圖形:
|
評論
查看更多