《Java程序案例教程》課件第3章_第1頁(yè)
《Java程序案例教程》課件第3章_第2頁(yè)
《Java程序案例教程》課件第3章_第3頁(yè)
《Java程序案例教程》課件第3章_第4頁(yè)
《Java程序案例教程》課件第3章_第5頁(yè)
已閱讀5頁(yè),還剩176頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第3章Java基本程序設(shè)計(jì)3.1變量與數(shù)據(jù)類型

3.2運(yùn)算符、表達(dá)式與語(yǔ)句

3.3循環(huán)與選擇性語(yǔ)句

3.1變量與數(shù)據(jù)類型

3.1.1變量與常量

下面來(lái)看一個(gè)簡(jiǎn)單的實(shí)例,以便于讀者了解Java中變量與常量之間的關(guān)系。下面的程序中聲明了兩種Java經(jīng)常使用到的變量—整型變量num與字符變量ch,為它們賦值后,再把它們的值分別顯示在顯示器上。

【例3-1】TestJava3_1.java。在TestJava3_1中,聲明了兩種不同類型的變量num與ch,并分別將常量3與字符“z”賦值給這兩個(gè)變量,最后再將它們顯示在顯示器上。

聲明一個(gè)變量時(shí),編譯程序會(huì)在內(nèi)存里開辟一塊足以容納此變量的內(nèi)存空間。不管變量的值如何改變,都永遠(yuǎn)使用相同的內(nèi)存空間。因此,善用變量是一種節(jié)省內(nèi)存的方式。

常量是不同于變量的一種類型,它的值是固定的,如整數(shù)常量、字符串常量。通常給變量賦值時(shí),會(huì)將常量賦值給它。在程序TestJava3_1中,第6行num是整型變量,而3則是常量。此行的作用是聲明num為整型變量,并把常量3這個(gè)值賦給它。第7行聲明了一個(gè)字符變量ch,并將字符常量'z'賦給它。當(dāng)然,在程序進(jìn)行過(guò)程中,可以為變量重新賦值,也可以使用已經(jīng)聲明過(guò)的變量。3.1.2Java的變量類型

在Java中規(guī)定了八種變量類型來(lái)存儲(chǔ)整數(shù)、浮點(diǎn)數(shù)、字符和布爾值,如圖3-1所示。圖3-1Java的變量類型3.1.3基本數(shù)據(jù)類型

到目前為止,相信讀者已經(jīng)對(duì)Java有了一些初步的認(rèn)識(shí),如果想在程序中使用一個(gè)變量,就必須先聲明,此時(shí)編譯程序會(huì)在未使用的內(nèi)存空間中尋找一塊足夠保存這個(gè)變量的空間以供這個(gè)變量使用。Java的基本數(shù)據(jù)類型如表3-1所示。表3-1Java的基本數(shù)據(jù)類型

1.整數(shù)類型

當(dāng)數(shù)據(jù)不帶有小數(shù)或分?jǐn)?shù)時(shí),可以聲明為整數(shù)變量,如3、-147等為整數(shù)。Java中,整型數(shù)據(jù)類型可以分為long、int、short和byte四種。long為64位,也就是8個(gè)字節(jié),可表示范圍為?-9?223?372?036?854?775?808~9?223?372?036?854?775?807;int為32位,也就是4個(gè)字節(jié),表示范圍為?-2?147?483?648~2?147?483?647;若數(shù)據(jù)值的范圍為?-32?768~32?767,可以聲明為short(短整數(shù))類型;若數(shù)據(jù)值更小,在?-128到127之間,可以聲明為byte類型以節(jié)省內(nèi)存空間。

1)常量的數(shù)據(jù)類型

Java把整數(shù)常量的數(shù)據(jù)類型均視為int型,因此,如果在程序中使用了超過(guò)2?147?483?647這個(gè)大小的常量,編譯時(shí)將發(fā)生錯(cuò)誤。

【例3-2】TestJava3_2.java。

2)數(shù)據(jù)類型的最大值與最小值

Java提供了long、int、short及byte四種整數(shù)類型的最大值、最小值代碼,以方便設(shè)計(jì)者使用,最大值的代碼是MAX_VALUE,最小值是MIN_VALUE。如果要取用某個(gè)類型的最大值或最小值,只要在這些代碼之前加上它們所屬的類的全名即可。例如,如果程序代碼里需要用到長(zhǎng)整數(shù)的最大值,則可用如圖3-2所示的語(yǔ)法表示。圖3-2代碼的表示法由上面的語(yǔ)法可知,如果要使用某個(gè)類型的代碼,則必須先指定該類型所在的類庫(kù)以及該類型所屬的類,但因java.lang這個(gè)類庫(kù)屬于常用類庫(kù),所以默認(rèn)的Java程序會(huì)將它加載,因此在實(shí)際的應(yīng)用中設(shè)計(jì)者可以將它省略。

Java所提供的整數(shù)的最大值與最小值的標(biāo)識(shí)符及常量值可在表3-2中查閱。表3-2整數(shù)常量的特殊值代碼

3)溢出的發(fā)生

當(dāng)整數(shù)的數(shù)據(jù)大小超出了可以表示的范圍,而程序中又沒(méi)有進(jìn)行數(shù)值范圍的檢查時(shí),這個(gè)整型變量所輸出的值將發(fā)生紊亂,且不是預(yù)期的運(yùn)行結(jié)果。在下面的例子中,聲明了一個(gè)整型的數(shù),并把它賦值為整型可以表示的范圍的最大值,然后將它分別加1和加2。

【例3-4】TestJava3_4.java。當(dāng)最大值加上1時(shí),結(jié)果反而變成表示范圍中最小的值,當(dāng)最大值加上2時(shí),結(jié)果變成表示范圍中次小的值,這就是數(shù)據(jù)類型的溢出。讀者可以發(fā)現(xiàn),這個(gè)情形會(huì)出現(xiàn)一個(gè)循環(huán),若要避免這種情況的發(fā)生,就必須在程序中加上數(shù)值范圍的檢查功能,或者使用較大的表示范圍的數(shù)據(jù)類型,如長(zhǎng)整型。例如,聲明了一個(gè)整數(shù)i,其表示范圍為-2?147?483?648~2?147?483?647,當(dāng)i的值設(shè)為最大值2?147?483?647時(shí),它仍在整數(shù)的范圍內(nèi),但是當(dāng)x加1和加2時(shí),整數(shù)x的值反而變成?-2?147?483?648和-2?147?483?647,成為可表示范圍的最小值及次小值。上述情形就像計(jì)數(shù)器的內(nèi)容到最大值時(shí)會(huì)自動(dòng)歸零一樣。在整數(shù)中,最小值為-2?147?483?648,所以當(dāng)整數(shù)x的值最大時(shí),加上1就會(huì)變成最小值-2?147?483?648,也就是產(chǎn)生了溢出。可以參考圖3-3來(lái)了解數(shù)據(jù)類型的溢出問(wèn)題。圖3-3數(shù)據(jù)類型的溢出為了避免int類型的溢出,可以在該表達(dá)式中任一常量后加上大寫的“L”,或是在變量前面加上long,作為強(qiáng)制類型的轉(zhuǎn)換。例如,在下面的程序中加上了防止溢出的處理。為了讓讀者方便比較,特地保留了一個(gè)整數(shù)的溢出語(yǔ)句。

【例3-5】TestJava3_5.java。程序說(shuō)明:

(1)第6行聲明int類型的整數(shù)變量x,并賦值為整數(shù)最大值,即2?147?483?647。

(2)第7行輸出x的值,即2?147?483?647。

(3)第8行輸出x?+?1的值,此時(shí)溢出發(fā)生,運(yùn)行結(jié)果變成?-2?147?483?648。

(4)第9行輸出x?+?2的值,為了避免溢出發(fā)生,在表達(dá)式的常量部分2后加上L,執(zhí)行結(jié)果變成2?147?483?649。

(5)第10行輸出x?+?3的值,為了避免溢出發(fā)生,在表達(dá)式的整數(shù)部分x之前加上long,執(zhí)行結(jié)果變成2?147?483?650。

2.字符類型

字符類型在內(nèi)存中占有2個(gè)字節(jié),可以用來(lái)保存英文字母等字符。計(jì)算機(jī)處理字符類型時(shí),是把這些字符當(dāng)成不同的整數(shù)來(lái)看待的,因此,嚴(yán)格來(lái)說(shuō),字符類型也算是整數(shù)類型的一種。在計(jì)算機(jī)的世界里,所有的文字、數(shù)值都只是一連串的0與1。這些0與1對(duì)于設(shè)計(jì)者來(lái)說(shuō)難以理解,于是就產(chǎn)生了各種方式的編碼,它們指定一個(gè)數(shù)值來(lái)代表某個(gè)字符,如常用的字符碼系統(tǒng)ASCII。雖然各類編碼系統(tǒng)合起來(lái)有數(shù)百種之多,卻沒(méi)有一種包含足夠的字符、標(biāo)點(diǎn)符號(hào)及常用的專業(yè)技術(shù)符號(hào)。這些編碼系統(tǒng)之間可能還會(huì)有相互沖突的情形發(fā)生。也就是說(shuō),不同的編碼系統(tǒng)可能會(huì)使用相同的數(shù)值來(lái)表示不同的字符,在數(shù)據(jù)跨平臺(tái)的時(shí)候就會(huì)發(fā)生錯(cuò)誤。

Unicode就是為了避免上述情況的發(fā)生而產(chǎn)生的,它為每個(gè)字符制訂了一個(gè)唯一的數(shù)值,因此在任何語(yǔ)言、平臺(tái)、程序中都可以安心使用。Java所使用的就是Unicode字符碼系統(tǒng)。

舉例來(lái)說(shuō),Unicode中的小寫a以97來(lái)表示,在下面的程序中可以看到,聲明字符類型的變量ch1、ch2分別將變量ch1的值設(shè)為97,將ch2的值設(shè)為字符a,再輸出字符變量ch1及ch2的內(nèi)容。

【例3-6】TestJava3_6.java。輸出結(jié)果:

ch1=a

ch2=a

給字符變量賦值可以使用數(shù)值和字符,它們都可以使程序正確運(yùn)行。要注意的是,字符要用一對(duì)單引號(hào)(?''?)括起。

舉例來(lái)說(shuō),想在程序中輸出一個(gè)包括雙引號(hào)的字符串,可把字符變量賦值為轉(zhuǎn)義字符,再將它輸出來(lái)。也就是說(shuō),要在程序中聲明一個(gè)字符類型變量ch,可把ch設(shè)置為\",再進(jìn)行輸出操作?;蛘咭部梢灾苯釉谝敵龅淖址屑尤胩厥獾霓D(zhuǎn)義字符。表3-3為常用的轉(zhuǎn)義字符。表3-3常用的轉(zhuǎn)義字符下面的例子中將ch賦值為“\"”(要以單引號(hào)(')包圍),并將字符變量ch輸出在顯示器上,同時(shí)在打印的字符串里直接加入轉(zhuǎn)義字符。讀者可自行比較一下兩種方式的差異。

【例3-7】TestJava3_7.java。輸出結(jié)果:

"測(cè)試轉(zhuǎn)義字符!"

"helloworld!"

不管是用變量存放轉(zhuǎn)義字符,還是直接使用轉(zhuǎn)義字符來(lái)輸出字符串,程序都可以順利運(yùn)行。當(dāng)然也可以不聲明字符變量就輸出轉(zhuǎn)義字符,但如果在程序中加上太多轉(zhuǎn)移字符,以至于造成混淆而不易閱讀時(shí),采用聲明字符變量的方式就是一個(gè)很好的選擇。

3.浮點(diǎn)數(shù)類型與雙精度浮點(diǎn)數(shù)類型

在日常生活中用到小數(shù)類型的數(shù)值(如身高、體重等需要精確的數(shù)值)時(shí),整數(shù)就不能滿足程序設(shè)計(jì)者的要求了。在數(shù)學(xué)中,這些帶有小數(shù)點(diǎn)的數(shù)值稱為實(shí)數(shù);在Java里,這種數(shù)據(jù)類型稱為浮點(diǎn)數(shù)類型(float),其長(zhǎng)度為4個(gè)字節(jié),有效范圍為-3.4E38~3.4E38。當(dāng)浮點(diǎn)數(shù)的表示范圍不夠大時(shí),還有一種雙精度(double)浮點(diǎn)數(shù)可供使用。雙精度浮點(diǎn)數(shù)類型的長(zhǎng)度為8個(gè)字節(jié),有效范圍為-1.7E308~1.7E308。浮點(diǎn)數(shù)的表示方式,除了指數(shù)形式外,還可用帶有小數(shù)點(diǎn)的一般形式。例如,要聲明一個(gè)double類型的變量num與一個(gè)float類型的變量sum,并同時(shí)給sum賦初值3.0,可以在程序中做如下聲明及設(shè)置:值得一提的是,使用浮點(diǎn)型數(shù)值時(shí),默認(rèn)的類型是double,在數(shù)值后面可加上D或d作為double類型的標(biāo)識(shí)。在Java中,D或d是可有可無(wú)的。若在數(shù)值后面加上F或f,則為float類型的識(shí)別。若沒(méi)有加上F或f,Java就將該數(shù)據(jù)視為double類型,在編譯時(shí)就會(huì)發(fā)生錯(cuò)誤,錯(cuò)誤提示會(huì)告訴設(shè)計(jì)者可能失去精確度。例如,在下面的程序里聲明一個(gè)float類型的變量num,并賦值為3.0,將num*num的運(yùn)算結(jié)構(gòu)輸出到顯示器上。

【例3-8】TestJava3_8.java。表3-4浮點(diǎn)數(shù)常量的特殊值

4.布爾類型

布爾(boolean)類型的變量只有true(真)和false(假)兩種。也就是說(shuō),當(dāng)將一個(gè)變量定義成布爾類型時(shí),它的值只能是true或false,除此之外,沒(méi)有其他值可以賦值給這個(gè)變量。要想聲明status變量為布爾類型,并設(shè)置為true值,可以使用下面的語(yǔ)句:

booleanstatus=true; //聲明布爾變量status,并賦值為true

經(jīng)過(guò)聲明之后,布爾變量的初值為true。當(dāng)然如果在程序中需要更改status的值,可以隨時(shí)更改。

【例3-10】TestJava3_10.java。通常布爾值用來(lái)控制程序的流程,讀者可能會(huì)覺(jué)得有些抽象,本書將會(huì)陸續(xù)在后面的章節(jié)中介紹布爾值在程序流程中所起的作用。

5.基本數(shù)據(jù)類型的默認(rèn)值

在Java中,若在聲明變量時(shí)沒(méi)有給變量賦初值,則會(huì)給該變量賦默認(rèn)值。表3-5列出了各種類型的默認(rèn)值。表3-5基本數(shù)據(jù)類型的默認(rèn)值數(shù)據(jù)3.1.4數(shù)據(jù)類型的轉(zhuǎn)換

Java的數(shù)據(jù)類型在定義時(shí)就已經(jīng)確定了,因此不能隨意轉(zhuǎn)換成其他數(shù)據(jù)類型,但Java允許用戶有限度地進(jìn)行類型轉(zhuǎn)換處理。數(shù)據(jù)類型的轉(zhuǎn)換方式可分為自動(dòng)類型轉(zhuǎn)換及強(qiáng)制類型轉(zhuǎn)換兩種。

1.自動(dòng)類型轉(zhuǎn)換

在程序中已經(jīng)定義好了數(shù)據(jù)類型的變量,若要用另一種數(shù)據(jù)類型表示,則Java會(huì)在下列條件皆成立時(shí)自動(dòng)進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。

(1)轉(zhuǎn)換前的數(shù)據(jù)類型與轉(zhuǎn)換后的數(shù)據(jù)類型兼容。

(2)轉(zhuǎn)換后的數(shù)據(jù)類型的表示范圍比轉(zhuǎn)換前的大。值得注意的是,類型的轉(zhuǎn)換只限于該行語(yǔ)句,并不會(huì)影響原先所定義的變量的類型,而且通過(guò)自動(dòng)類型轉(zhuǎn)換,可以保證數(shù)據(jù)的精確度,不會(huì)因?yàn)檗D(zhuǎn)換而損失數(shù)據(jù)內(nèi)容。這種類型的轉(zhuǎn)換方式也稱為擴(kuò)大轉(zhuǎn)換。前面曾經(jīng)提到過(guò),若整數(shù)類型為short或byte,為了避免溢出,Java會(huì)將表達(dá)式中的short和byte類型自動(dòng)轉(zhuǎn)換成int類型,這樣可保證其運(yùn)算結(jié)果的正確性,這也是Java所提供的“擴(kuò)大轉(zhuǎn)換”功能。字符與整數(shù)可使用自動(dòng)類型轉(zhuǎn)換,整數(shù)與浮點(diǎn)數(shù)亦是兼容的,但是由于boolean類型只能存放true或false,與整數(shù)及字符不兼容,因此不可能進(jìn)行類型轉(zhuǎn)換。下面的例子給出了當(dāng)兩個(gè)數(shù)中有一個(gè)為浮點(diǎn)數(shù)時(shí)其運(yùn)算結(jié)果的變化。

2.強(qiáng)制類型轉(zhuǎn)換

當(dāng)兩個(gè)整數(shù)進(jìn)行運(yùn)算時(shí),其運(yùn)算結(jié)果也是整數(shù)。例如,當(dāng)做整數(shù)除法8/3的運(yùn)算時(shí),其結(jié)果為整數(shù)2,并不是實(shí)際的2.6666…,因此在Java中若要得到計(jì)算結(jié)果為浮點(diǎn)數(shù),就必須將數(shù)據(jù)類型做強(qiáng)制類型轉(zhuǎn)換。強(qiáng)制類型轉(zhuǎn)換的語(yǔ)法如下:

(欲轉(zhuǎn)換的數(shù)據(jù)類型)變量名稱;

因?yàn)檫@種強(qiáng)制類型轉(zhuǎn)換是直接編寫在程序代碼中的,所以也稱為顯性轉(zhuǎn)換。下面的程序說(shuō)明了在Java中整數(shù)與浮點(diǎn)數(shù)是如何轉(zhuǎn)換的。

【例3-12】TestJava3_12。當(dāng)兩個(gè)整數(shù)相除時(shí),小數(shù)點(diǎn)以后的數(shù)字會(huì)被截?cái)?,使得運(yùn)算結(jié)果為整數(shù)。但由于這并不是預(yù)期的計(jì)算結(jié)果,而想要得到的運(yùn)算結(jié)果為浮點(diǎn)數(shù),因此就必須將兩個(gè)整數(shù)中的一個(gè)(或兩個(gè))強(qiáng)制轉(zhuǎn)換為浮點(diǎn)數(shù)。下面的三種寫法都正確。

(1)?(float)a/b//:將整數(shù)a強(qiáng)制轉(zhuǎn)換成浮點(diǎn)數(shù),再與整數(shù)b相除。

(2)?a/(float)b//:將整數(shù)b強(qiáng)制轉(zhuǎn)換成浮點(diǎn)數(shù),再以整數(shù)a除之。

(3)?(float)a/(/float)b//:將整數(shù)a與b同時(shí)強(qiáng)制轉(zhuǎn)換成浮點(diǎn)數(shù),再相除。只要在變量前面加上欲轉(zhuǎn)換的數(shù)據(jù)類型,運(yùn)行時(shí)就會(huì)自動(dòng)將此行語(yǔ)句里的變量進(jìn)行類型轉(zhuǎn)換處理,但這并不影響原先所定義的數(shù)據(jù)類型。此外,將一個(gè)超出該變量可表示范圍的值賦值給這個(gè)變量稱為縮小轉(zhuǎn)換。由于在轉(zhuǎn)換過(guò)程中可能會(huì)降低數(shù)據(jù)的精確度,因此Java并不會(huì)自動(dòng)進(jìn)行這些類型轉(zhuǎn)換,此時(shí)就必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。案例1數(shù)據(jù)類型轉(zhuǎn)換

【案例描述】

Java語(yǔ)言中的數(shù)據(jù)類型有多種,不同數(shù)據(jù)類型之間可以進(jìn)行轉(zhuǎn)換。

【技術(shù)要點(diǎn)】

不同數(shù)據(jù)類型占用的內(nèi)存空間大小不一樣,因此表示的范圍也不一樣。各種數(shù)據(jù)類型是可以相互轉(zhuǎn)換的,有些轉(zhuǎn)換是默認(rèn)的,有些轉(zhuǎn)換是強(qiáng)制的。如果在計(jì)算中沒(méi)有注意到這些隱式轉(zhuǎn)換,則可能損失數(shù)據(jù)的精度,影響得出正確的結(jié)果。

【代碼與注釋】

程序名稱為TypeTransform.java。圖3-4程序運(yùn)行結(jié)果【程序解析】

第7行的正常運(yùn)算結(jié)果是6.5,進(jìn)行自動(dòng)類型轉(zhuǎn)換后為6;第9行和10行強(qiáng)制類型轉(zhuǎn)換的結(jié)果是不一樣的。第11行進(jìn)行隱式強(qiáng)制類型轉(zhuǎn)換。

【相關(guān)知識(shí)】

當(dāng)操作數(shù)的類型不同時(shí),經(jīng)常需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,將操作數(shù)轉(zhuǎn)化為所需要的類型。強(qiáng)制類型轉(zhuǎn)換有兩種形式:顯式強(qiáng)制類型轉(zhuǎn)換和隱式強(qiáng)制類型轉(zhuǎn)換。顯式強(qiáng)制類型轉(zhuǎn)換需要使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符,格式如下:

(type)<expression>

其中,type為類型描述符,如int、float等;<expression>為表達(dá)式。經(jīng)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符運(yùn)算后,返回一個(gè)具有type類型的數(shù)值。

隱式強(qiáng)制類型轉(zhuǎn)換發(fā)生在賦值表達(dá)式和有返回值的函數(shù)調(diào)用表達(dá)式中。在賦值表達(dá)式中,如果賦值符左右兩側(cè)的操作數(shù)類型不同,則將賦值符右邊操作數(shù)強(qiáng)制轉(zhuǎn)換為賦值符左側(cè)的類型后,賦值給賦值符左側(cè)的變量。

字符型數(shù)據(jù)在計(jì)算機(jī)中用ASCII碼表示。 3.2運(yùn)算符、表達(dá)式與語(yǔ)句

3.2.1表達(dá)式與運(yùn)算符

Java中的語(yǔ)句有很多種形式,表達(dá)式就是其中的一種。表達(dá)式由操作數(shù)與運(yùn)算符組成。操作數(shù)可以是常量、變量,也可以是方法,而運(yùn)算符就是數(shù)學(xué)中的運(yùn)算符號(hào),如“+”、“-”、“*”、“/”、“%”等。下面以表達(dá)式z+100為例,“z”與“100”都是操作數(shù),而“+”就是運(yùn)算符,如圖3-5所示。圖3-5表達(dá)式由操作數(shù)與運(yùn)算符組成

Java提供了許多運(yùn)算符,這些運(yùn)算符除了可以處理一般的數(shù)學(xué)運(yùn)算外,還可以做邏輯運(yùn)算、地址運(yùn)算等。根據(jù)其所使用的類的不同,運(yùn)算符可分為賦值運(yùn)算符、一元運(yùn)算符、算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、遞增與遞減運(yùn)算符、邏輯運(yùn)算符、條件運(yùn)算符、括號(hào)運(yùn)算符等。

1.賦值運(yùn)算符

當(dāng)為各種不同數(shù)據(jù)類型的變量賦值時(shí),必須使用賦值運(yùn)算符(=)。表3-6列出的賦值運(yùn)算符雖然只有一個(gè),但它是Java語(yǔ)言中必不可少的。表3-6賦?值?運(yùn)?算?符等號(hào)(=)在Java中并不是“等于”的意思,而是“賦值”的意思。

例如,圖3-6所示的語(yǔ)句是將整數(shù)22賦值給num這個(gè)變量。又如:

num=num-3

其含義是把num-3的值運(yùn)算之后再賦值給num存放,因?yàn)橹耙呀?jīng)把num的值設(shè)為22,所以執(zhí)行這個(gè)語(yǔ)句時(shí),Java會(huì)先處理等號(hào)后面的部分num-3(值為19),再賦值給等號(hào)前面的變量num,執(zhí)行后,存放在變量num的值就變成了19。圖3-6表達(dá)式的賦值范例

2.一元運(yùn)算符

對(duì)于大部分表達(dá)式而言,運(yùn)算符前后都會(huì)有操作數(shù)。但是有一種運(yùn)算符較特別,它只需要一個(gè)操作數(shù),稱為一元運(yùn)算符。下面的語(yǔ)句就是由一元運(yùn)算符與一個(gè)操作數(shù)所組成的。表3-7一元運(yùn)算符輸出結(jié)果:

a=127,~a=–128

b=false,!b=true

程序說(shuō)明:

(1)第6行聲明了byte變量a,并賦值為該類型的最大值,即a的值為127。

(2)第7行聲明了boolean變量b,賦值為false。

(3)第8行輸出a與~a的運(yùn)算結(jié)果。

(4)第9行輸出b與!b的運(yùn)算結(jié)果。b的值為false,因此進(jìn)行“!”運(yùn)算后,b的值就變成了true。

3.算術(shù)運(yùn)算符

在數(shù)學(xué)中經(jīng)常會(huì)用到算術(shù)運(yùn)算符。表3-8列出了算術(shù)運(yùn)算符的成員。

1)加法運(yùn)算符“+”

加法運(yùn)算符用于將加法運(yùn)算符“+”的前后兩個(gè)操作數(shù)相加。

2)減法運(yùn)算符“-”

減法運(yùn)算符用于將減法運(yùn)算符“-”前面的操作數(shù)減去后面的操作數(shù)。

3)乘法運(yùn)算符“*”

乘法運(yùn)算符用于將乘法運(yùn)算符“*”的前后兩個(gè)操作數(shù)相乘。

4)除法運(yùn)算符“/”

除法運(yùn)算符用于將除法運(yùn)算符“/”前面的操作數(shù)除以后面的操作數(shù)。

5)余數(shù)運(yùn)算符“%”

余數(shù)運(yùn)算符用于將余數(shù)運(yùn)算符“%”前面的操作數(shù)除以后面的操作數(shù),取其所得到的余數(shù)。

下面程序聲明了兩個(gè)整型變量a、b,并分別賦值為5和3,再將a%b的運(yùn)算結(jié)果輸出。

【例3-16】TestJava3_16.java。

4.關(guān)系運(yùn)算符與if語(yǔ)句

設(shè)計(jì)者常常會(huì)在if語(yǔ)句中用到關(guān)系運(yùn)算符,所以有必要介紹if語(yǔ)句的用法。if語(yǔ)句的格式如下:

if(判斷條件)

語(yǔ)句;

如果括號(hào)中的判斷條件成立,則會(huì)執(zhí)行后面的語(yǔ)句;如果判斷條件不成立,則后面的語(yǔ)句不會(huì)被執(zhí)行。

當(dāng)x的值大于0,即判斷條件成立時(shí),會(huì)執(zhí)行輸出字符串“IlikeJava!”的操作;相反,當(dāng)x的值為0或小于0時(shí),if語(yǔ)句的判斷條件不成立,則不會(huì)執(zhí)行上述操作。表3-9列出了關(guān)系運(yùn)算符的成員,這些運(yùn)算符在數(shù)學(xué)上也是經(jīng)常使用的。在Java中,關(guān)系運(yùn)算符的表示方式和在數(shù)學(xué)中很類似,但是由于賦值運(yùn)算符為“=”,因此為了避免混淆,當(dāng)使用關(guān)系運(yùn)算符“等于”(==)時(shí),必須用兩個(gè)等號(hào)表示,而關(guān)系運(yùn)算符“不等于”的形式有些特別,用“!=”代表,這是因?yàn)樵阪I盤上取得數(shù)學(xué)上的不等于符號(hào)“≠”較為困難,所以就用“!=”表示不等于。當(dāng)使用關(guān)系運(yùn)算符去判斷一個(gè)表達(dá)式成立與否時(shí),若判斷式成立則會(huì)產(chǎn)生一個(gè)響應(yīng)值true,若判斷式不成立則會(huì)產(chǎn)生響應(yīng)值false。下面程序判斷if語(yǔ)句括號(hào)中的條件是否成立,若成立則執(zhí)行if后面的語(yǔ)句。

【例3-17】TestJava3_17.java。程序說(shuō)明:

(1)在第6行中,由于5>2的條件成立,所以執(zhí)行第7行的語(yǔ)句,即輸出返回值true。

(2)在第8行中,若if語(yǔ)句的參數(shù)為true,判斷成立,所以接著執(zhí)行第9行的語(yǔ)句,輸出字符串HelloTestJava!。

(3)第11行中,3+6并不等于3-6,if的判斷條件不成立,所以第12行語(yǔ)句不被執(zhí)行。

5.遞增與遞減運(yùn)算符

遞增與遞減運(yùn)算符在C/C++?中就已經(jīng)存在,Java仍然將它們保留了下來(lái),這是因?yàn)樗鼈兙哂邢喈?dāng)大的便利性。表3-10列出了遞增與遞減運(yùn)算符的成員。表3-10遞增與遞減運(yùn)算符善用遞增與遞減運(yùn)算符可使程序更加簡(jiǎn)潔。例如,聲明一個(gè)int類型的變量a,在程序運(yùn)行中使其加1,語(yǔ)句如下:

a=a+1; //?a加1后再賦值給a存放

也可以利用遞增運(yùn)算符“++”寫出更簡(jiǎn)潔的語(yǔ)句,而語(yǔ)句的意義是相同的。例如:

a++; //?a加1后再賦值給a存放,a++?為簡(jiǎn)潔寫法

在程序中還可以看到另外一種遞增運(yùn)算符“++”的用法,即遞增運(yùn)算符“++”在變量的前面,如?++a,這和a++?所代表的意義是不一樣的。a++?會(huì)先執(zhí)行整個(gè)語(yǔ)句后再將a的值加1,而?++b則先把b的值加1后,再執(zhí)行整個(gè)語(yǔ)句。下面程序?qū)與b的值皆設(shè)為3,并將a++?及?++b輸出,讀者可以輕易地比較出兩者的不同。程序說(shuō)明:

(1)在第8行中,輸出a++?及運(yùn)算后a的值,所以執(zhí)行a++?后,a的值才會(huì)加1,變成4。

(2)在第10行中,輸出?++b運(yùn)算后b的值,所以執(zhí)行?++b前,b的值先加1,變成4。

同樣地,遞減運(yùn)算符“--”的使用方式和遞增運(yùn)算符“++”是相同的,遞增運(yùn)算符“++”用來(lái)將變量值加1,而遞減運(yùn)算符“--”則用來(lái)將變量值減1。

此外,遞增與遞減運(yùn)算符只能將變量加1或減1,若要將變量加或減非1的數(shù),則還得用原來(lái)“a=a+2”的方法。

6.邏輯運(yùn)算符

在if語(yǔ)句中也經(jīng)常用到邏輯運(yùn)算符。表3-11列出了邏輯運(yùn)算符的成員。

當(dāng)使用邏輯運(yùn)算符&&時(shí),運(yùn)算符前后的兩個(gè)操作數(shù)的返回值皆為真,運(yùn)算的結(jié)果才會(huì)為真;使用邏輯運(yùn)算符“||”時(shí),運(yùn)算符前后的兩個(gè)操作數(shù)的返回值只要有一個(gè)為真,運(yùn)算的結(jié)果就會(huì)為真。例如:

(1)?a>0&&b>0 //兩個(gè)操作數(shù)皆為真,運(yùn)算結(jié)果才為真

(2)?a>0||b> 0 //兩個(gè)操作數(shù)只要一個(gè)為真,運(yùn)算結(jié)果就為真在第1個(gè)例子中,a?>?0且b?>?0時(shí),表達(dá)式的返回值為true,即表示這兩個(gè)條件必須同時(shí)成立結(jié)果才為真;在第2個(gè)例子中,只要a?>?0或者b?>?0,表達(dá)式的返回值即為true,這兩個(gè)條件僅需要一個(gè)成立即可。讀者可以參考表3-12所列結(jié)果。由表3-12可以看出,在條件中,只要有一個(gè)條件為假(false),相與的結(jié)果就是假(false);相反地,如果有一個(gè)條件為真(true),那么相或的結(jié)果就為真(true)。下面程序判斷a的值是否在0~100之間,如果不在則表示成績(jī)輸入錯(cuò)誤,如果a的值在50~60之間,則需要補(bǔ)考。

【例3-19】TestJava3_19.java。

程序說(shuō)明:

(1)當(dāng)程序執(zhí)行到第7行時(shí),if會(huì)根據(jù)括號(hào)中a的值作判斷,若a?<?0或a?>?100,則條件成立,執(zhí)行第8行的語(yǔ)句,輸出字符串“輸入的數(shù)據(jù)有錯(cuò)誤!”。由于學(xué)生成績(jī)介于0~100分之間,因此當(dāng)a的值不在這個(gè)范圍時(shí),就會(huì)視為輸入錯(cuò)誤。

(2)不管第8行是否執(zhí)行,都會(huì)接著執(zhí)行第9行的程序。if再根據(jù)括號(hào)中a的值做判斷,若a?<?60且a?>?49,則條件成立,表示該成績(jī)需要進(jìn)行補(bǔ)考,執(zhí)行第10行的語(yǔ)句,輸出“準(zhǔn)備補(bǔ)考吧!”。

7.括號(hào)運(yùn)算符

除了前面所述運(yùn)算符外,括號(hào)()也是Java的運(yùn)算符,如表3-13所示。3.2.2運(yùn)算符的優(yōu)先級(jí)

表3-14列出了各個(gè)運(yùn)算符的優(yōu)先級(jí)排列,數(shù)字越小,表示優(yōu)先級(jí)越高。表3-14運(yùn)算符的優(yōu)先級(jí)3.2.3表達(dá)式

表達(dá)式是由常量、變量或其他操作數(shù)與運(yùn)算符組合而成的語(yǔ)句。例如,下面的例子均是表達(dá)式正確的使用方法。

此外,Java還有一些相當(dāng)簡(jiǎn)潔的寫法,即將算術(shù)運(yùn)算符和賦值運(yùn)算符結(jié)合成為新的運(yùn)算符。表3-15列出了這些運(yùn)算符。表3-15簡(jiǎn)潔的表達(dá)式程序說(shuō)明:

(1)第6行分別把變量a、b賦值為5及8。

(2)第7行在運(yùn)算之前先輸出變量a、b的值,a為5,b為8。

(3)第8行計(jì)算a+=b,這個(gè)語(yǔ)句相當(dāng)于a=a+b,將a+b的值存放到a中,即計(jì)算5+8的結(jié)果后賦值給a存放。

(4)第9行輸出運(yùn)算之后變量a、b的值,所以a的值變成13,而b仍為8。

除了前面所提到的算術(shù)運(yùn)算符和賦值運(yùn)算符的結(jié)合可以存在于簡(jiǎn)潔的表達(dá)式中外,遞增、遞減運(yùn)算符也同樣可以應(yīng)用在簡(jiǎn)潔的表達(dá)式中。表3-16列出了一些簡(jiǎn)潔寫法的運(yùn)算符及其范例說(shuō)明。表3-16簡(jiǎn)潔表達(dá)式的范例3.2.4表達(dá)式的類型轉(zhuǎn)換

當(dāng)int類型遇上了float類型時(shí),到底誰(shuí)是“贏家”呢?Java是一種很有彈性的程序設(shè)計(jì)語(yǔ)言,當(dāng)上述的情況發(fā)生時(shí),只要堅(jiān)持“以不流失數(shù)據(jù)為前提”的大原則,即可做不同的類型轉(zhuǎn)換,使不同類型的數(shù)據(jù)、表達(dá)式都能繼續(xù)存儲(chǔ)。依照大原則,當(dāng)Java發(fā)現(xiàn)程序的表達(dá)式中有類型不相符的情況時(shí),會(huì)依據(jù)下列規(guī)則來(lái)處理類型的轉(zhuǎn)換。

(1)占用字節(jié)較少的類型轉(zhuǎn)換成占用字節(jié)較多的類型。

(2)字符類型會(huì)轉(zhuǎn)換成int類型。

(3)?int類型會(huì)轉(zhuǎn)換成float類型。

(4)表達(dá)式中若某個(gè)操作數(shù)的類型為double,則另一個(gè)操作數(shù)也會(huì)轉(zhuǎn)換成double類型。

(5)布爾類型不能轉(zhuǎn)換成其他類型。圖3-7數(shù)據(jù)類型的轉(zhuǎn)換過(guò)程案例2根據(jù)成績(jī)計(jì)算績(jī)點(diǎn)

【案例描述】

Java語(yǔ)言中的變量可以隨時(shí)聲明隨時(shí)使用,但在不同的位置定義的變量,它的作用范圍不同,變量的作用范圍是在一定的范圍內(nèi)有效的。本案例演示了在多個(gè)位置定義變量之間的關(guān)系。

【技術(shù)要點(diǎn)】

變量在一定范圍內(nèi)有效,即變量超出其作用范圍,其占用的內(nèi)存空間將會(huì)被回收。此時(shí)對(duì)其重新進(jìn)行聲明是可以的。

【代碼與注釋】

程序名稱為VarScope.java?!具\(yùn)行結(jié)果】

程序運(yùn)行結(jié)果如圖3-8所示。

【程序解析】

第2行定義的變量w是類變量,作用域是整個(gè)類;第6行定義的變量z是局部變量,作用域只能是?{}?內(nèi)。圖3-8程序運(yùn)行結(jié)果【相關(guān)知識(shí)】

局部變量是在方法內(nèi)定義的變量,也稱為自動(dòng)(Automatic)變量。它的作用域?yàn)樗诜椒ɑ蚍椒ㄖ械哪硥K代碼,離開該方法,局部變量將會(huì)被清除。在成員方法內(nèi)定義的變量是該成員方法的“局部”變量。如果在幾個(gè)成員方法中使用相同的變量名,則所代表的是不同的變量。在一個(gè)確定的域中,變量名應(yīng)該是唯一的。通常一個(gè)域用大括號(hào)“{”和“}”來(lái)劃定。局部變量在方法或方法的某一塊代碼中聲明。

類變量是在類中聲明的,不是在類的方法中聲明的,顯然它的作用域是整個(gè)類。

方法參數(shù)用于將數(shù)據(jù)傳遞給方法,它的作用域不能超越使用它的方法。 3.3循環(huán)與選擇性語(yǔ)句

3.3.1程序的結(jié)構(gòu)設(shè)計(jì)

一般來(lái)說(shuō),程序的結(jié)構(gòu)包含下面三種:

(1)順序結(jié)構(gòu);

(2)選擇結(jié)構(gòu);

(3)循環(huán)結(jié)構(gòu)。

這三種不同的結(jié)構(gòu)有一個(gè)共同點(diǎn),就是它們都只有一個(gè)入口,也只有一個(gè)出口。程序中使用了上面這些結(jié)構(gòu)到底有什么好處呢?這些單一入、出口可以讓程序易讀、好維護(hù),也可以減少調(diào)試的時(shí)間。下面以流程圖的方式來(lái)介紹這三種結(jié)構(gòu)的不同。

1.順序結(jié)構(gòu)

本書前面例子采用的都是順序結(jié)構(gòu),程序由上而下逐行執(zhí)行,一條語(yǔ)句執(zhí)行完之后繼續(xù)執(zhí)行下一條語(yǔ)句,一直到程序的末尾。這種結(jié)構(gòu)如圖3-9所示。圖3-9順序結(jié)構(gòu)的基本流程

2.選擇結(jié)構(gòu)

選擇結(jié)構(gòu)根據(jù)條件的成立與否再?zèng)Q定要執(zhí)行哪些語(yǔ)句的結(jié)構(gòu),其流程圖如圖3-10所示。

這種結(jié)構(gòu)可以依據(jù)判斷條件的結(jié)構(gòu)來(lái)決定要執(zhí)行的語(yǔ)句。當(dāng)判斷條件的值為真時(shí),就運(yùn)行“語(yǔ)句1”;當(dāng)判斷條件的值為假時(shí),執(zhí)行“語(yǔ)句2”。不論執(zhí)行哪一個(gè)語(yǔ)句,最后都會(huì)再回到“語(yǔ)句3”繼續(xù)執(zhí)行。例如,下面程序聲明了兩個(gè)整數(shù)a及b,并賦初值,如果a大于b,則在顯示器中輸出a-b的計(jì)算結(jié)果。無(wú)論a是否大于b,最后均輸出a*b的值。圖3-10選擇結(jié)構(gòu)的基本流程

3.循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)根據(jù)判斷條件的成立與否,決定程序段落的執(zhí)行次數(shù),而這個(gè)程序段落就稱為循環(huán)主體。循環(huán)結(jié)構(gòu)的流程圖如圖3-11所示。圖3-11循環(huán)結(jié)構(gòu)的基本流程3.3.2選擇結(jié)構(gòu)

1.?if語(yǔ)句

在前面簡(jiǎn)單地介紹了if的用法。要根據(jù)判斷的結(jié)構(gòu)來(lái)執(zhí)行不同的語(yǔ)句時(shí),使用if語(yǔ)句就是一個(gè)很好的選擇,它會(huì)準(zhǔn)確地檢測(cè)判斷條件成立與否,再?zèng)Q定是否要執(zhí)行后面的語(yǔ)句。

if語(yǔ)句的格式如下:若if語(yǔ)句主體中要處理的語(yǔ)句只有1個(gè),可省略左、右大括號(hào)。當(dāng)判斷條件的值不為假時(shí),就會(huì)逐一執(zhí)行大括號(hào)里面所包含的語(yǔ)句。if語(yǔ)句的流程圖如圖3-12所示。圖3-12if語(yǔ)句的流程圖

2.?if…else語(yǔ)句

當(dāng)程序中存在含有分支的判斷語(yǔ)句時(shí),就可以用if...else語(yǔ)句處理。當(dāng)判斷條件成立時(shí),執(zhí)行if語(yǔ)句主體;當(dāng)判斷條件不成立時(shí),則會(huì)執(zhí)行else后面的語(yǔ)句主體。if…else語(yǔ)句的格式如下:若在if語(yǔ)句主體或else語(yǔ)句主體中要處理的語(yǔ)句只有一個(gè),則可以將左、右大括號(hào)去除。if…else語(yǔ)句的流程圖如圖3-13所示。圖3-13if...else語(yǔ)句的基本流程下面例子聲明一個(gè)整型變量a,并給其賦初值5,在程序中判斷a是奇數(shù)還是偶數(shù),再將判斷的結(jié)果輸出。

【例3-24】TestJava3_24.java。程序說(shuō)明:

(1)第6~9行為if...else語(yǔ)句。在第6行中,if的判斷條件為a%2==1,若a除以2取余數(shù)得到的結(jié)果為1,則表示a為奇數(shù),若a除以2取余數(shù)得到的結(jié)果為0,則a為偶數(shù)。

(2)當(dāng)a除以2取余數(shù)的結(jié)果為1時(shí),執(zhí)行第7行語(yǔ)句,輸出“a為奇數(shù)!”;否則執(zhí)行第9行語(yǔ)句,輸出“a為偶數(shù)!”。

讀者可以自行更改變量a的初值,再重復(fù)執(zhí)行程序。

從上面的程序中可以發(fā)現(xiàn),程序的縮進(jìn)在這種選擇結(jié)構(gòu)中起著非常重要的作用,它可以使設(shè)計(jì)者編寫的程序結(jié)構(gòu)層次清晰,在維護(hù)上也比較簡(jiǎn)單。所以本書建議讀者以后在編寫程序時(shí)要養(yǎng)成縮進(jìn)的好習(xí)慣。

3.條件運(yùn)算符

條件運(yùn)算符可以代替if…else語(yǔ)句,如表3-17所示。表3-17條件運(yùn)算符輸出結(jié)果:

a=5,b=13

最大的數(shù)是:13

程序說(shuō)明:

(1)第6行聲明變量并為其賦初值。a、b為要比較大小的兩個(gè)整數(shù)值;max存放比較大小后最大的那個(gè)值。

(2)第7行賦值,當(dāng)a?>?b時(shí),max=a,否則max=b。

(3)第8行輸出a、b的值。

(4)第9行輸出最大值。

可以自行更改a、b的值,再運(yùn)行此程序。讀者可以發(fā)現(xiàn),使用條件運(yùn)算符編寫程序時(shí)較為簡(jiǎn)潔,它用一個(gè)語(yǔ)句就可以替代一長(zhǎng)串的if...else語(yǔ)句,所以條件運(yùn)算符的執(zhí)行速度也較快。

4.?if...elseif...else語(yǔ)句

如果需要在if...else中判斷多個(gè)條件,則需要if...elseif...else語(yǔ)句,其格式如下:

3.3.3多重選擇語(yǔ)句—switch語(yǔ)句

switch語(yǔ)句可以將多選一的情況簡(jiǎn)化,使程序簡(jiǎn)潔易懂。本節(jié)將介紹如何使用switch語(yǔ)句和break語(yǔ)句;此外,還要討論在switch語(yǔ)句中如果不使用break語(yǔ)句會(huì)出現(xiàn)的問(wèn)題。

要在許多選擇條件中找到并執(zhí)行其中一個(gè)符合判斷條件的語(yǔ)句時(shí),除了可以使用if...else不斷地判斷之外,還可以使用另一種更方便的方式,即多重選擇—switch語(yǔ)句。使用嵌套if...else語(yǔ)句最常發(fā)生的狀況就是容易將if與else配對(duì)混淆而造成閱讀及運(yùn)行上的錯(cuò)誤。使用switch語(yǔ)句可以避免這種錯(cuò)誤的發(fā)生。要特別注意的是,在switch語(yǔ)句里的選擇值只能是字符或常量。switch語(yǔ)句的執(zhí)行流程如下:

(1)計(jì)算括號(hào)中表達(dá)式的結(jié)果。

(2)根據(jù)表達(dá)式的值檢測(cè)是否符合執(zhí)行case后面的選擇值,若所有case的選擇值皆不符合,則執(zhí)行default所包含的語(yǔ)句,執(zhí)行完畢后離開switch語(yǔ)句。

(3)如果某個(gè)case的選擇值符合表達(dá)式的結(jié)果,則執(zhí)行該case所包含的語(yǔ)句,一直遇到break語(yǔ)句后離開switch語(yǔ)句。

(4)若沒(méi)有在case語(yǔ)句結(jié)尾處加上break語(yǔ)句,則會(huì)一直執(zhí)行到switch語(yǔ)句的尾端才離開switch語(yǔ)句。

(5)若沒(méi)有定義default該執(zhí)行的語(yǔ)句,則什么也不會(huì)執(zhí)行,直接離開switch語(yǔ)句。

根據(jù)上面的描述,可以繪制出如圖3-14所示的switch語(yǔ)句流程圖。圖3-14switch語(yǔ)句的基本流程程序說(shuō)明:

(1)第7行利用變量存放一個(gè)運(yùn)算符號(hào),如3+2、5*7等。

(2)第8~25行為switch語(yǔ)句。當(dāng)oper為字符?+、-、*、/?時(shí),輸出運(yùn)算的結(jié)果后離開switch語(yǔ)句。若所輸入的運(yùn)算符皆不在這些范圍內(nèi),則執(zhí)行default所包含的語(yǔ)句,輸出“未知的操作!”,再離開switch。

(3)選擇值為字符時(shí),必須用單引號(hào)將字符包圍起來(lái)。

程序運(yùn)行結(jié)果會(huì)因?yàn)闆](méi)有加上break語(yǔ)句而出現(xiàn)錯(cuò)誤,所以程序設(shè)計(jì)者在使用switch語(yǔ)句時(shí)要特別注意是否需要加上break語(yǔ)句。3.3.4while循環(huán)

while是循環(huán)語(yǔ)句,也是條件判斷語(yǔ)句。當(dāng)事先不知道循環(huán)該執(zhí)行多少次時(shí),就要用到while循環(huán)。

while循環(huán)的格式如下:當(dāng)while循環(huán)主體有且只有一個(gè)語(yǔ)句時(shí),可以將大括號(hào)除去。在while循環(huán)語(yǔ)句中,只有一個(gè)判斷條件,它可以是任何表達(dá)式。當(dāng)判斷條件的值為真時(shí),循環(huán)執(zhí)行一次,再重復(fù)測(cè)試判斷條件,執(zhí)行循環(huán)主體,直到判斷條件的值為假,跳離while循環(huán)。

下面列出了while循環(huán)執(zhí)行的流程。

(1)第一次進(jìn)入while循環(huán)前,就必須先為循環(huán)控制變量(或表達(dá)式)賦起始值。

(2)根據(jù)判斷條件的內(nèi)容決定是否要繼續(xù)執(zhí)行循環(huán)。如果條件判斷值為真(true),則繼續(xù)執(zhí)行循環(huán)主體;如果條件判斷值為假(false),則跳出循環(huán)執(zhí)行其他語(yǔ)句。

(3)執(zhí)行完循環(huán)主體內(nèi)的語(yǔ)句后,重新為循環(huán)控制變量(或表達(dá)式)賦值(增加或減少)。由于while循環(huán)不會(huì)自動(dòng)更改循環(huán)控制變量(或表達(dá)式)的內(nèi)容,所以在while循環(huán)中為循環(huán)控制變量賦值的工作要由設(shè)計(jì)者自己來(lái)做。完成后回到第(2)步重新判斷是否繼續(xù)執(zhí)行循環(huán)。

根據(jù)上述程序流程可以繪制出如圖3-15所示的while循環(huán)流程圖。圖3-15while循環(huán)的基本流程程序說(shuō)明:

(1)在第6行中,將循環(huán)控制變量i的值賦值為1。

(2)第7行進(jìn)入while循環(huán)的判斷條件為i<=10,第一次進(jìn)入循環(huán)時(shí),由于i的值為1,所以判斷條件的值為真,即進(jìn)入循環(huán)主體。

(3)第8~11行為循環(huán)主體,sum+i后指定給sum存放,i的值加1,回到循環(huán)起始處,繼續(xù)判斷i的值是否仍在所限定的范圍內(nèi),直到i大于10跳出循環(huán),表示累加的操作已經(jīng)完成,最后將sum的值輸出。3.3.5do…while循環(huán)

do…while循環(huán)用于未知循環(huán)執(zhí)行次數(shù)的情況下。while循環(huán)和do…while循環(huán)的最大不同就是進(jìn)入while循環(huán)前,while語(yǔ)句會(huì)先測(cè)試判斷條件的真假,再?zèng)Q定是否執(zhí)行循環(huán)主體,而do…while循環(huán)則是“先做再說(shuō)”,每次都先執(zhí)行一次循環(huán)主體,然后再測(cè)試判斷條件的真假,所以無(wú)論循環(huán)成立的條件是什么,使用do…while循環(huán)時(shí),至少都會(huì)執(zhí)行一次循環(huán)主體。當(dāng)循環(huán)主體只有一個(gè)語(yǔ)句時(shí),可以將左、右大括號(hào)去掉。第一次進(jìn)入do...while循環(huán)語(yǔ)句時(shí),不管判斷條件(它可以是任何表達(dá)式)是否符合執(zhí)行循環(huán)的條件,都會(huì)直接執(zhí)行循環(huán)主體。循環(huán)主體執(zhí)行完畢,才開始測(cè)試判斷條件的值,如果判斷條件的值為真,則再次執(zhí)行循環(huán)主體,如此重復(fù)測(cè)試判斷條件,執(zhí)行循環(huán)主體,直到判斷條件的值為假,才會(huì)跳離do…while循環(huán)。下面列出了do…while循環(huán)執(zhí)行的流程:

(1)進(jìn)入do...while循環(huán)前,為循環(huán)控制變量(或表達(dá)式)賦起始值。

(2)直接執(zhí)行循環(huán)主體,循環(huán)主體執(zhí)行完畢,才開始根據(jù)判斷條件的內(nèi)容決定是否繼續(xù)執(zhí)行循環(huán):條件判斷值為真(true)時(shí),繼續(xù)執(zhí)行循環(huán)主體;條件判斷值為假(false)時(shí),跳出循環(huán),執(zhí)行其他語(yǔ)句。

(3)執(zhí)行完循環(huán)主體內(nèi)的語(yǔ)句后,重新為循環(huán)控制變量(或表達(dá)式)賦值(增加或減少)。由于do…while循環(huán)和while循環(huán)一樣,不會(huì)自動(dòng)更改循環(huán)控制變量(或表達(dá)式)的內(nèi)容,所以在do…while循環(huán)中賦值循環(huán)控制變量的工作要由自己來(lái)做。之后回到第(2)步重新判斷是否繼續(xù)執(zhí)行循環(huán)。

根據(jù)上述描述可以繪制出如圖3-16所示的do...while循環(huán)流程圖。圖3-16do…while循環(huán)的基本流程首先聲明程序中要使用的變量(循環(huán)記數(shù)及累加操作數(shù))及sum(累加的總和),并將sum設(shè)初值為0。由于要計(jì)算1?+?2?+?…?+?10,因此在第一次進(jìn)入循環(huán)時(shí)將i的值設(shè)為1。接著判斷i是否小于等于10,如果i小于等于10,則計(jì)算sum+i的值后再指定給sum存放。當(dāng)i的值已經(jīng)不滿足循環(huán)條件時(shí),i即會(huì)跳出循環(huán),表示累加的操作已經(jīng)完成,再輸出sum的值,程序結(jié)束運(yùn)行。

程序說(shuō)明:

(1)第8~12行利用do…while循環(huán)計(jì)算1~10的數(shù)的累加。

(2)第14行輸出1~10的數(shù)的累加結(jié)果:1+2+…+10=?55。

do...while循環(huán)不管條件是什么,都是先做再說(shuō),因此循環(huán)的主體最少會(huì)被執(zhí)行一次。在日常生活中,如果能夠多加注意,并不難找到do…while循環(huán)的影子。例如,在利用提款機(jī)提款前,會(huì)先進(jìn)入輸入密碼的畫面,讓使用者輸入三次密碼,如果皆輸入錯(cuò)誤,則會(huì)將銀行卡吞掉,其程序的流程就是利用do…while循環(huán)設(shè)計(jì)而成的。

3.3.6for循環(huán)

當(dāng)很明確地知道循環(huán)要執(zhí)行的次數(shù)時(shí),就可以使用for循環(huán),其語(yǔ)句格式如下:若在循環(huán)主體中要處理的語(yǔ)句只有1個(gè),則可以將大括號(hào)去掉。下面列出了for循環(huán)的流程:

(1)第一次進(jìn)入for循環(huán)時(shí),為循環(huán)控制變量賦起始值。

(2)根據(jù)判斷條件的內(nèi)容檢查是否要繼續(xù)執(zhí)行循環(huán),當(dāng)判斷條件值為真(true)時(shí),繼續(xù)執(zhí)行循環(huán)主體內(nèi)的語(yǔ)句;當(dāng)判斷條件值為假(false)時(shí),則會(huì)跳出循環(huán),執(zhí)行其他語(yǔ)句。

(3)執(zhí)行完循環(huán)主體內(nèi)的語(yǔ)句后,循環(huán)控制變量會(huì)根據(jù)增減量的要求,更改循環(huán)控制變量的值,再回到第(2)步重新判斷是否繼續(xù)執(zhí)行循環(huán)。

根據(jù)上述描述可以繪制出如圖3-17所示的for循環(huán)流程圖。

下例利用for循環(huán)來(lái)完成由1至10的數(shù)的累加運(yùn)算。圖3-17for循環(huán)的基本流程3.3.7循環(huán)嵌套

當(dāng)循環(huán)語(yǔ)句中又出現(xiàn)循環(huán)語(yǔ)句時(shí),就稱為嵌套循環(huán),如嵌套for循環(huán)、嵌套while循環(huán)等。當(dāng)然也可以使用混合嵌套循環(huán),也就是循環(huán)中又有其他不同種類的循環(huán)。下面以打印九九乘法表為例介紹嵌套循環(huán)的用法。

【例3-31】TestJava3_31.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論