版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章程序流程控制
3.1選擇結(jié)構(gòu)程序設(shè)計3.2循環(huán)結(jié)構(gòu)程序設(shè)計3.3break和continue語句
3.1選擇結(jié)構(gòu)程序設(shè)計
Java語言提供了兩條基本的分支選擇語句:if語句和switch語句。用這兩條語句可以形成以下三種形式的選擇結(jié)構(gòu):
(1)雙分支選擇結(jié)構(gòu)。由if/else語句構(gòu)成,用來判定一個條件(布爾表達(dá)式),當(dāng)條件為真(true)時執(zhí)行一個操作,當(dāng)條件為假(false)時執(zhí)行另一個操作。
(2)單分支選擇結(jié)構(gòu)。由省略了else的if語句構(gòu)成,在條件為真時執(zhí)行一個操作,在條件為假時則跳過該操作。
(3)多分支選擇結(jié)構(gòu)。由switch語句構(gòu)成,根據(jù)表達(dá)式的值來決定執(zhí)行許多不同操作中的某一個操作。當(dāng)然,使用嵌套的if語句也可以實現(xiàn)多分支選擇結(jié)構(gòu)。3.1.1if語句
if語句是構(gòu)造分支選擇結(jié)構(gòu)程序的基本語句。使用if語句的基本形式,可構(gòu)造雙分支選擇結(jié)構(gòu)程序;使用省略了else的if語句可構(gòu)造單分支選擇結(jié)構(gòu)程序;使用嵌套的if語句可構(gòu)造多分支選擇結(jié)構(gòu)程序。下面分別講述這幾種形式。
1.if語句的基本形式
if語句的基本形式如下:
if(布爾表達(dá)式)
???語句區(qū)塊1
else
???語句區(qū)塊2
其執(zhí)行流程如圖3.1所示。圖3.1if語句的基本形式說明:
(1)這里的“布爾表達(dá)式”為關(guān)系表達(dá)式或邏輯表達(dá)式(下同)。
(2)“語句區(qū)塊”是指一條語句或多條語句。當(dāng)為多條語句時,一定要用一對花括號(“{”和“}”)將其括起,使之成為一條復(fù)合語句。例如,在下面程序的if語句中,關(guān)系表達(dá)式grade>=60為true時,執(zhí)行“語句區(qū)塊1”,它由兩條語句構(gòu)成,所以使用了一對花括號使其構(gòu)成一條復(fù)合語句,否則,編譯時會指出語法錯誤;而當(dāng)關(guān)系表達(dá)式grade>=60為false時,執(zhí)行“語句區(qū)塊2”,它只有一條語句,所以可以省去花括號。
【示例程序C3_1.java】判斷給出的一個成績,輸出“通過”或“不及格”。
publicclassC3_1
{??publicstaticvoidmain(String[?]args)
{
intgrade;
grade=86;//讀者在調(diào)試時也可賦一個小于60的成績試試看
/*此處最好使用一個數(shù)據(jù)輸入語句。但Java從鍵盤讀取整數(shù)或浮點數(shù)時要使用類、對象、
方法等知識。限于我們目前所學(xué),此處用了一個賦值語句,待讀者學(xué)習(xí)了第4章后,可
對該程序進(jìn)行相應(yīng)的修改,使其適用于各種情況*/
if(grade>=60)
{
System.out.print(“通過,成績是:”);
System.out.println(grade);
}
else
System.out.println(“不及格”);
}
}
該程序的運行結(jié)果如下:
通過,成績是:86請注意該程序的縮進(jìn)格式。這種縮進(jìn)格式雖然不是必須的,但由于它突出了程序的結(jié)構(gòu),大大提高了程序的清晰度和可讀性,故國際上提倡和推薦這種程序書寫風(fēng)格。
【示例程序C3_2.java】比較兩個數(shù)的大小。
importjava.applet.Applet;
importjava.awt.Graphics;
publicclassC3_2extendsApplet
{
publicvoidpaint(Graphicsg)
{
doubled1=43.4;
doubled2=85.3;
if(d1>=d2)
g.drawString(d1+“>=”+d2,25,25);
else
g.drawString(d1+“<”+d2,25,25);
}
}
該程序的運行結(jié)果如下:
43.4<85.3
2.省略了else子句的if語句
在if語句中,可以省略else子句以形成單分支結(jié)構(gòu)。其形式如下:
if(布爾表達(dá)式)語句區(qū)塊
其執(zhí)行流程如圖3.2所示。圖3.2if語句中省略了else子句的形式
【示例程序C3_3.java】判斷給出的一個成績,當(dāng)成績小于60時,輸出“未通過”及具體成績,其他情況時什么也不輸出。
publicclassC3_3
{?publicstaticvoidmain(String[?]args)
{
intgrade;
grade=56;//讀者在調(diào)試時也可賦一個等于或大于60的成績試試看
if(grade<60)
{System.out.print("未通過,成績是:");
System.out.println(grade);
}
}
}該程序的運行結(jié)果如下:
未通過,成績是:56
3.?if語句的嵌套
在實際問題中,往往并不是由一個簡單的條件就可以決定執(zhí)行某些操作,而是需要由若干個條件來決定執(zhí)行若干個不同的操作。例如,將百分制轉(zhuǎn)換為5分制的問題就是一個典型代表。Java語言對于這一類問題提供了多種處理方法:可以用邏輯運算符構(gòu)成復(fù)雜的布爾表達(dá)式,也可以在if語句中嵌套if語句,還可以使用switch語句。這里主要討論嵌套的if語句。讀者也許已經(jīng)注意到,在if語句中的“語句區(qū)塊”可以是任何合法的Java語句,當(dāng)然也包括if語句本身。因此,如果在if語句的“語句區(qū)塊”中仍然是if語句,則構(gòu)成if語句的嵌套結(jié)構(gòu),從而形成多分支選擇結(jié)構(gòu)的程序。當(dāng)然,if語句既可以嵌套在if語句后,也可以嵌套在else語句后,其形式如下:
if(布爾表達(dá)式1)語句區(qū)塊1
elseif(布爾表達(dá)式2)語句區(qū)塊2
elseif(布爾表達(dá)式3)語句區(qū)塊3
else語句區(qū)塊n+1
圖3.3展示了嵌套在else語句后的情形。圖3.3if嵌套結(jié)構(gòu)的一種形式
【示例程序C3_4.java】使用if嵌套將百分制轉(zhuǎn)換為5分制。
publicclassC3_4
{
publicstaticvoidmain(String[?]args)
{
intgrade=76;
if(grade>=90)System.out.println(“成績:優(yōu)”);
elseif(grade>=80)System.out.println(“成績:良”);
elseif(grade>=70)System.out.println("成績:中等");
elseif(grade>=60)System.out.println(“成績:及格”);
elseSystem.out.println(“成績:不及格”);
}
}
該程序的運行結(jié)果如下:
成績:中等
4.使用if嵌套時的注意事項
(1)?Java編譯器將else與離它最近的if組合在一起,除非用花括號“{?}”才能指定不同的匹配方式。例如,某編程者的意圖是當(dāng)x和y都大于6時,輸出“設(shè)備正?!钡男畔?;而當(dāng)x不大于6時,輸出“設(shè)備出錯”的信息。為此,他寫出了如下所示的程序。
【示例程序C3_5.java】if嵌套的使用。
publicclassC3_5
{
publicstaticvoidmain(String[?]args)
{
intx,y;
x=3;y=14;
if(x>6)
if(y>6)
System.out.println(“設(shè)備正?!?;
else
System.out.println(“設(shè)備出錯”);
}
}
該程序在執(zhí)行時,只有當(dāng)x>6且y≤6時才輸出“設(shè)備出錯”的信息,而當(dāng)x不大于6時什么信息也不輸出。這是因為該程序中有兩個if而只有一個else,這時,這個else將與離它最近的if配對,而與書寫中的對齊方式無關(guān)。實際上,該程序的if嵌套結(jié)構(gòu)圖如圖3.4所示,且由于x=3,故程序運行后沒有輸出,與編程者的意圖相悖。如果希望if嵌套按編程者的意圖執(zhí)行,則必須用花括號將內(nèi)嵌的if結(jié)構(gòu)括起來,即寫為
if(x>6)
{if(y>6)
System.out.println(“設(shè)備正?!?;
}
else
System.out.println("設(shè)備出錯");
這樣的if嵌套結(jié)構(gòu)圖如圖3.5所示。用花括號將第二個if結(jié)構(gòu)括起,即可向編譯器表明它是一個省略了else的if語句,而程序中的else與第一個if結(jié)構(gòu)相對應(yīng)。
圖3.4程序C3_5的if嵌套結(jié)構(gòu)圖圖3.5程序C3_5改寫后的if嵌套結(jié)構(gòu)圖
(2)在嵌套的if語句中,同樣要注意每個“語句區(qū)塊”只能是“一個語句或一個復(fù)合語句”,當(dāng)“語句區(qū)塊”中包含多條語句時,必須用花括號將這些語句括起來,使其構(gòu)成一條復(fù)合語句,否則會導(dǎo)致語法錯誤或輸出錯誤。例如,下面兩個程序片段中左側(cè)的嵌套if語句在x>6時,不論y的值如何,總會執(zhí)行第二條輸出語句;而右側(cè)的嵌套if語句只有當(dāng)x和y都大于6時,才執(zhí)行兩條輸出語句,否則,一條輸出語句也不執(zhí)行。這兩個程序片段的if嵌套結(jié)構(gòu)如圖3.6所示。
if(x>6)if(x>6)
{if(y>6)?if(y>6)
System.out.print("x="+x);{System.out.print("x="+x);
System.out.print("y="+y);System.out.print("y="+y);
}}圖3.6上述兩個程序片段的if嵌套結(jié)構(gòu)3.1.2switch語句
當(dāng)要從多個分支中選擇一個分支去執(zhí)行時,雖然可用if嵌套語句來解決,但當(dāng)嵌套層數(shù)較多時,程序的可讀性大大降低。Java提供的switch語句可清楚地處理多分支選擇問題。switch語句根據(jù)表達(dá)式的值來執(zhí)行多個操作中的一個,其格式如下:
switch(表達(dá)式)
{case值1:語句區(qū)塊1;break; //分支1
case值2:語句區(qū)塊2;break; //分支2
case值n:語句區(qū)塊n;break; //分支n
[default:語句區(qū)塊n+1;] //分支n+1
}
switch語句的執(zhí)行流程如圖3.7所示。圖3.7switch語句的執(zhí)行流程說明:
(1)?switch后面表達(dá)式的類型可以是byte、char、short和int(不允許是浮點數(shù)類型和long型)。
(2)?case后面的值1、值2、…、值n是與表達(dá)式類型相同的常量,但它們之間的值應(yīng)各不相同,否則就會出現(xiàn)相互矛盾的情況。case后面的語句塊可以不用花括號括起。
(3)?default語句可以省去不要。
(4)當(dāng)表達(dá)式的值與某個case后面的常量值相等時,就執(zhí)行此case后面的語句塊。
(5)若去掉break語句,則執(zhí)行完第一個匹配case后的語句塊后,會繼續(xù)執(zhí)行其余case后的語句塊,而不管這些語句塊前的case值是否匹配?!臼纠绦駽3_6.java】判斷成績等級。
importjava.applet.Applet;
importjava.awt.Graphics;
publicclassC3_6extendsApplet
{
publicvoidpaint(Graphicsg)
{
intk;
intgrade=86;
k=grade/10;
switch(k){
case10:
case9:
g.drawString("成績:優(yōu)",25,25);break;
case8:
case7:
g.drawString(“成績:良”,25,25);break;
case6:
g.drawString(“成績:及格?!?25,25);break;
default:g.drawString(“成績:不及格。”,25,25);
}
}
}
該程序的運行結(jié)果如下:
成績:良
3.1.3條件運算符
對于一些簡單的if/else語句,可用條件運算符來替代。例如,若有以下if語句:
if(x>y)m=x;
elsem=y;
則可用下面的條件運算符來替代:
m=(x>y)?x:y
其中,“?:”被稱為條件運算符;“(x>y)?x:y”被稱為條件表達(dá)式。條件表達(dá)式的語義是:若(x>y)條件為true,則表達(dá)式的值取x的值,否則表達(dá)式的值取y的值。條件表達(dá)式的一般形式為:
布爾表達(dá)式1?表達(dá)式2:表達(dá)式3在條件表達(dá)式中:
(1)表達(dá)式2和表達(dá)式3的類型必須相同。
(2)條件運算符的執(zhí)行順序是:先求解表達(dá)式1,若值為true則執(zhí)行表達(dá)式2,此時表達(dá)式2的值將作為整個條件表達(dá)式的值;否則求解表達(dá)式3,此時表達(dá)式3的值將作為整個條件表達(dá)式的值。
在實際應(yīng)用中,常常將條件運算符與賦值運算符結(jié)合起來,構(gòu)成賦值表達(dá)式,以替代比較簡單的if/else語句。條件運算符的優(yōu)先級高于賦值運算符,因此,其結(jié)合方向為“自右至左”。
【示例程序C3_7.java】條件運算符的使用。
publicclassC3_7
{
publicstaticvoidmain(Stringargs[?])
{intx,y,z,a,b;
a=1;
b=2;
x=(a>b)?a:b;
y=(a!=b)?a:b;
z=(a<b)?a:b;
System.out.print("\tx="+x);
System.out.print(“\ty=”+y);
System.out.println(“\tz=”+z);
}
}
該程序的運行結(jié)果如下:
x=2y=1z=1
3.2循環(huán)結(jié)構(gòu)程序設(shè)計
循環(huán)語句的作用是反復(fù)執(zhí)行一段程序代碼,直到滿足終止條件為止。Java語言提供的循環(huán)語句有while語句、do-while語句和for語句。這些循環(huán)語句各有其特點,用戶可根據(jù)不同的需要選擇使用。3.2.1while語句
while語句的一般格式為:
while(布爾表達(dá)式)
{
循環(huán)體語句區(qū)塊
}
while語句中各個成分的執(zhí)行次序是:先判斷布爾表達(dá)式的值,若值為假,則跳過循環(huán)體,執(zhí)行循環(huán)體后面的語句;若布爾表達(dá)式的值為true,則執(zhí)行循環(huán)體中的語句區(qū)塊,然后再回去判斷布爾表達(dá)式的值,如此反復(fù),直至布爾表達(dá)式的值為false,跳出while循環(huán)體為止。其執(zhí)行流程如圖3.8所示。圖3.8while語句的執(zhí)行流程【示例程序C3_8.java】打印數(shù)字1~5。
publicclassC3_8
{
publicstaticvoidmain(String[?]args)
{intcounter=1; //循環(huán)變量及其初始值
while(counter<=5) //循環(huán)條件
{System.out.println(“counter=”+counter);
counter++; //循環(huán)變量增值
}
}
}該程序的運行結(jié)果如下:
counter=1
counter=2
counter=3
counter=4
counter=5
3.2.2do-while語句
do-while語句的一般格式為:
do{
循環(huán)體語句區(qū)塊
}while(布爾表達(dá)式)
圖3.9do-while語句的執(zhí)行流程
do-while語句中各個成分的執(zhí)行次序是:先執(zhí)行一次循環(huán)體語句區(qū)塊,然后再判斷布爾表達(dá)式的值,若值為false,則跳出do-while循環(huán),執(zhí)行后面的語句;若值為true,則再次執(zhí)行循環(huán)體語句區(qū)塊。如此反復(fù),直到布爾表達(dá)式的值為false,跳出do-while循環(huán)為止。其執(zhí)行流程如圖3.9所示。
do-while循環(huán)語句與while循環(huán)語句的區(qū)別僅在于do-while循環(huán)中的循環(huán)體至少執(zhí)行一次,而while循環(huán)中的循環(huán)體可能一次也不執(zhí)行。
【示例程序C3_9.java】計算從1開始的連續(xù)n個自然數(shù)之和,當(dāng)其和值剛好超過100時結(jié)束,求這個n值。
importjava.applet.Applet;
importjava.awt.Graphics;
publicclassC3_9extendsApplet
{
publicvoidpaint(Graphicsg)
{
intn=0; //計數(shù)器變量
intsum=0; //循環(huán)變量及其初始值
do{
n++; //計數(shù)器變量增1
sum+=n; //循環(huán)變量增值
}while(sum<=100); //循環(huán)條件
g.drawString(“sum=”+sum,25,25);
g.drawString(“n=”+n,100,25);
}
}
該程序的運行結(jié)果如下:
sum=105n=143.2.3for語句
for語句的一般格式為:
for(初值表達(dá)式;布爾表達(dá)式;循環(huán)過程表達(dá)式)
{
循環(huán)體程序語句區(qū)塊
}
其中:“初值表達(dá)式”對循環(huán)變量賦初值;“布爾表達(dá)式”用來判斷循環(huán)是否繼續(xù)進(jìn)行;“循環(huán)過程表達(dá)式”完成修改循環(huán)變量、改變循環(huán)條件的任務(wù)。圖3.10for語句的執(zhí)行流程
for語句的執(zhí)行流程見圖3.10。其執(zhí)行過程是:
(1)求解初值表達(dá)式。
(2)求解布爾表達(dá)式,若值為真,則執(zhí)行循環(huán)體語句區(qū)塊,然后再執(zhí)行第(3)步;若值為假,則跳出循環(huán)語句。
(3)求解循環(huán)過程表達(dá)式,然后轉(zhuǎn)去執(zhí)行第(2)步。
【示例程序C3_10.java】求自然數(shù)1~100之間所有奇數(shù)之和。
publicclassC3_10
{publicstaticvoidmain(String[?]args)
{intsum=0,odd;
for(odd=1;odd<=100;odd+=2)
{sum+=odd;}
System.out.println(“sum=”+sum+“odd=”+odd);
}
}
該程序的運行結(jié)果如下:
sum=2500odd=101
請考慮輸出的odd值為什么是101,而不是99,sum的輸出值中是否加上了101。
【示例程序C3_11.java】求解Fibonacci數(shù)列1,1,2,3,5,8,…的前36個數(shù)。
分析該數(shù)列可以得到構(gòu)造該數(shù)列的遞推關(guān)系是:將其寫成如下的Java程序:
publicclassC3_11
{publicstaticvoidmain(String[?]args)
{
intf1=1,f2=1; //?f1為第一項,即奇位項;f2為第二項,即偶位項
for(inti=1;i<38/2;i++)
{
System.out.print("\t"+f1+"\t"+f2);//每次輸出兩項
if(i%2==0)System.out.println("\n");//每輸出兩次共4項后換行
f1=f1+f2; //計算下一個奇位項
f2=f2+f1; //計算下一個偶位項
}
}
}該程序的運行結(jié)果如下:3.2.4for語句頭的變化與逗號運算符
需要注意的是,在for語句中,for頭的構(gòu)件——括號內(nèi)的三個表達(dá)式,均可省略,但兩個分號不可省略。當(dāng)在for頭的構(gòu)件中省略了任何一個表達(dá)式時,應(yīng)該注意將其寫在程序中的其他位置,否則會出現(xiàn)“死循環(huán)”等問題。請讀者務(wù)必牢記,如果不是萬不得已,最好不要使用省略表達(dá)式的形式,因為使用省略表達(dá)式的形式實際上已經(jīng)失去了使用for語句的意義。下面通過一個例子來說明省略這些表達(dá)式時的情況?!臼纠绦駽3_12.java】編寫求解n(即1?+?2?+?3?+?…?+?9?+?10)的程序。
publicclassC3_12
{
publicstaticvoidmain(String[?]args)
{inti=1; //初值表達(dá)式寫在循環(huán)語句之前
intsum=0;
for(;;) //for頭的三個構(gòu)件全部省略
{sum+=i++; //循環(huán)過程表達(dá)式i++?寫在了循環(huán)體內(nèi)
if(i>10)break;//布爾表達(dá)式寫在了循環(huán)體內(nèi)的if語句中
}
System.out.println("sum="+sum);
}
}該程序的運行結(jié)果如下:
sum=55
此外,在for語句頭的構(gòu)件中,“初值表達(dá)式”和“循環(huán)過程表達(dá)式”中還可以使用逗號運算符。這也是Java中唯一使用逗號運算符的地方。
【示例程序C3_13.java】在for循環(huán)的初值表達(dá)式中使用逗號運算符。
publicclassC3_13
{
publicstaticvoidmain(String[?]args)
{inti,sum;
for(i=1,sum=0;i<=10;i++)//初值表達(dá)式中使用了逗號運算符
sum+=i;
System.out.println(“sum=”+sum);
}
}
該程序的運行結(jié)果如下:
sum=55
【示例程序C3_14.java】在“初值表達(dá)式”和“循環(huán)過程表達(dá)式”中都使用了逗號運算符,且省略了“布爾表達(dá)式”的情況。
publicclassC3_14
{publicstaticvoidmain(String[?]args)
{inti,sum;
//下面的for循環(huán)中省略了布爾表達(dá)式,其余位置使用了逗號運算符
for(i=1,sum=0;;i++,sum+=i)
if(i>10)break;//循環(huán)體改成了判定跳轉(zhuǎn)語句
System.out.println("sum="+sum);
}
}
該程序的運行結(jié)果如下:
sum=653.2.5循環(huán)語句比較
前面通過示例程序講述了三種循環(huán)語句的用法。一般情況下,Java系統(tǒng)提供的三種循環(huán)語句是可以相互替代的,尤其是對于那些確切地知道所需執(zhí)行次數(shù)的循環(huán)。然而,由于for語句頭中包含了控制循環(huán)所需要的各個構(gòu)件,因此,對于同樣的問題,使用for循環(huán)編寫的程序最簡潔清晰。如果讀者將求自然數(shù)1~10之和的問題分別用三種循環(huán)結(jié)構(gòu)寫出,就可以清楚地看到這一事實。對于那些只知道某些語句要反復(fù)執(zhí)行多次(至少執(zhí)行一次),但不知道確切執(zhí)行次數(shù)的問題,使用do-while循環(huán)會使程序更清晰。對于那種某些語句可能要反復(fù)執(zhí)行多次,也可能一次都不執(zhí)行的問題,使用while循環(huán)當(dāng)然是最好了。3.2.6循環(huán)控制要點
進(jìn)行循環(huán)控制主要有兩種辦法,一種是用計數(shù)器控制循環(huán),另一種是用標(biāo)記控制循環(huán)。大多數(shù)循環(huán)結(jié)構(gòu)程序是利用計數(shù)器的原理來控制的。設(shè)計計數(shù)器控制循環(huán)的程序,需要把握下面幾個要點:
(1)循環(huán)控制變量(或循環(huán)計數(shù)器)的名字,即循環(huán)變量名。
(2)循環(huán)控制變量的初始值。
(3)每執(zhí)行一次循環(huán),循環(huán)控制變量的增量(或減量)。
(4)測試循環(huán)控制變量的終值條件(即是否繼續(xù)進(jìn)行循環(huán))。通過仔細(xì)分析前面的示例程序可以看出,用三種不同的循環(huán)語句編寫的程序都具有上述四個方面的內(nèi)容,其中以for語句最為典型,它把所有這些構(gòu)件都放在了for語句頭中,圖3.11明確地指出了這些方面。圖3.11一個典型for語句頭的組成構(gòu)件用標(biāo)記控制循環(huán)主要適用于那些事先無法知道循環(huán)次數(shù)的事務(wù)處理。例如統(tǒng)計選票就是這樣一類問題,只知道有許多人參加投票,但不能確切地知道選票數(shù)。在這種情況下可以使用一個叫做標(biāo)記值的特殊值作為“數(shù)據(jù)輸入結(jié)束”的標(biāo)志,當(dāng)用戶將所有合法的數(shù)據(jù)都輸入之后,可以輸入這個標(biāo)記值,表示最后一個數(shù)據(jù)已經(jīng)輸入完了。循環(huán)控制語句得到這個標(biāo)記值后,結(jié)束循環(huán)。標(biāo)記控制循環(huán)通常也稱做不確定循環(huán),因為在循環(huán)開始執(zhí)行之前并不知道循環(huán)的次數(shù)。下面的程序使用“#”作為循環(huán)控制標(biāo)記。
【示例程序C3_15.java】設(shè)有李、王、張三人競選領(lǐng)導(dǎo),由群眾投票表決,試設(shè)計一個統(tǒng)計選票的程序。
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
publicclassC3_15
{??publicstaticvoidmain(String[?]args)throwsIOException
{
BufferedReaderkeyin=newBufferedReader(newInputStreamReader(System.in));
//上面一條語句是有關(guān)鍵盤輸入數(shù)據(jù)流的處理,字符在各對象之間的流動過程如圖3.12所示
intLtotal=0,Wtotal=0,Ztotal=0;
charname;
Stringc1;
System.out.print(“enterletterLorWorZname,#toend:”);
c1=keyin.readLine(?); //從鍵盤上讀取一個字符串賦給c1
name=c1.charAt(0); //charAt(0)是從一個字符串中截取第0個字符的方法
while(name!=‘#’)
{
switch(name)
{
case'L':
case‘l’: //李姓人的得票,列出兩個case分別處理大、小寫字母
Ltotal=Ltotal+1;break;
case‘W’:
case‘w’: //王姓人的得票
Wtotal=Wtotal+1;break;
case‘Z’:
case‘z’: //張姓人的得票
Ztotal=Ztotal+1;break;
} //?switch語句結(jié)束
System.out.print(“enterletterLorWorZname,#toend:”);
c1=keyin.readLine(?);
name=c1.charAt(0);
} //?while循環(huán)結(jié)束
System.out.println(“Ltotal=”+Ltotal);
System.out.println(“Wtotal=”+Wtotal);
System.out.println(“Ztotal=”+Ztotal);
}
}
該程序運行時,可在NetBeansIDE的“輸出”窗口中通過鍵盤輸入數(shù)據(jù),輸入過程及運行結(jié)果如圖3.12所示。圖3.12程序C3_15的運行結(jié)果圖3.13顯示了從鍵盤輸入直到最后一個對象得到一個字符,字符在4個對象之間的流動過程。這4個對象是System.in、InputStreamReader的對象(無名對象)、keyin和c1。除了對象c1,其他3個對象都被畫成了一個管道的形狀,它們在系統(tǒng)中負(fù)責(zé)傳遞字節(jié)和字符。這些對象被稱做流對象,?數(shù)據(jù)在它們當(dāng)中按照一定的順序流動。InputStreamReader的對象(無名對象)負(fù)責(zé)從鍵盤讀入字節(jié)數(shù)據(jù),這里讀入了4個字節(jié)。對象keyin把無名對象的每個字節(jié)都轉(zhuǎn)換成char類型的值。對象keyin的readLine(?)方法把換行符(/n)以前的所有字符都拷貝到c1字符串對象中,最后,對象c1的成員方法charAt(?)從字符串中取出第一個字符賦給name變量。圖3.13字符在各對象之間的流動過程3.2.7循環(huán)嵌套
循環(huán)嵌套是指在循環(huán)體內(nèi)包含有循環(huán)語句的情形。Java語言提供的三種循環(huán)結(jié)構(gòu)可以自身嵌套,也可以相互嵌套。循環(huán)嵌套時應(yīng)該注意的是:無論哪種嵌套關(guān)系都必須保證每一個循環(huán)結(jié)構(gòu)的完整性,不能出現(xiàn)交叉。
下面幾種循環(huán)嵌套都是合法的形式。
【示例程序C3_16.java】編程打印三角形數(shù)字圖案。
publicclassC3_16
{publicstaticvoidmain(String[?]args)
{for(inti=1;i<=10;i++) //外層for循環(huán)
{
for(intj=1;j<=11-i;j++) //內(nèi)嵌for循環(huán)
System.out.print(“”); //內(nèi)嵌for循環(huán)的循環(huán)體
for(intj=1;j<=i;j++) //并列的內(nèi)嵌for循環(huán)
{
if(i>=10)System.out.print(+i+“”);
elseSystem.out.print(+i+“”);
} //并列的內(nèi)嵌for循環(huán)結(jié)束
System.out.println(“”);
} //外層for循環(huán)結(jié)束
}
}該程序的運行結(jié)果如下:
【示例程序C3_17.java】編寫求解(即1!?+?2!?+?3!?+?…?+?7!?+?8!)的程序。publicclassC3_17{publicstaticvoidmain(String[?]args){intn=1,m,s,k=0;while(n<=8){for(s=1,m=1;m<=n;m++)s=s*m; //計算n!,結(jié)果存于s中
k=k+s; //計算前n項階乘之和,結(jié)果存于k中
System.out.println(n+"!="+s+"k="+k);n++;
}}}該程序的運行結(jié)果如下:
1!=1k=1
2!=2k=3
3!=6k=9
4!=24k=33
5!=120k=153
6!=720k=873
7!=5040k=5913
8!=40320k=46233
3.3break和continue語句
Java語言提供了4種轉(zhuǎn)移語句:break、continue、return和throw。轉(zhuǎn)移語句的功能是改變程序的執(zhí)行流程。本節(jié)只介紹break和continue兩個轉(zhuǎn)移語句。break語句可以獨立使用,而continue語句只能用在循環(huán)結(jié)構(gòu)的循環(huán)體中。
3.3.1break語句
break語句通常有不帶標(biāo)號和帶標(biāo)號兩種形式:
break;
breaklab;
其中:break是關(guān)鍵字,lab是用戶定義的標(biāo)號。
break語句雖然可以獨立使用,但通常主要用于switch結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中,控制程序的執(zhí)行流程轉(zhuǎn)移。break語句的應(yīng)用有下列三種情況:
(1)?break語句用在switch語句中,其作用是強制退出switch結(jié)構(gòu),執(zhí)行switch結(jié)構(gòu)后的語句。這一功能已在3.1.2節(jié)中陳述過。
(2)?break語句用在單層循環(huán)結(jié)構(gòu)的循環(huán)體中,其作用是強制退出循環(huán)結(jié)構(gòu),如圖3.14所示。若程序中有內(nèi)外兩重循環(huán),而break語句寫在內(nèi)循環(huán)中,則執(zhí)行break語句只能退出內(nèi)循環(huán),而不能退出外循環(huán)。若想要退出外循環(huán),可使用帶標(biāo)號的break語句。
(3)?breaklab語句用在循環(huán)語句中(必須在外循環(huán)入口語句的前方寫上lab標(biāo)號),可使程序流程退出標(biāo)號所指明的外循環(huán),如圖3.15所示。圖3.14break語句在單循環(huán)中的執(zhí)行流程圖3.15break語句在雙循環(huán)中的執(zhí)行流程
【示例程序C3_18.java】求1~100間的素數(shù)。
素數(shù)也稱為質(zhì)數(shù),是不能被從2開始到比它自身小1的任何正整數(shù)整除的自然數(shù),如3、5、7等都是素數(shù)。解決該問題的算法可用偽代碼描述如下:
(1)構(gòu)造外循環(huán)得到一個1~100之間的數(shù)i,為減少循環(huán)次數(shù),可跳過所有偶數(shù);
(2)構(gòu)造內(nèi)循環(huán)得到一個2~之間的數(shù)j,考察i是否能被j整除,若能整除則i不是素數(shù),結(jié)束內(nèi)循環(huán);
(3)內(nèi)循環(huán)結(jié)束后判斷j是否大于等于m+1,若是,則i必為素數(shù),打印輸出之;否則,再次進(jìn)行外循環(huán)。將上述偽代碼寫成Java程序如下:
publicclassC3_18
{??publicstaticvoidmain(String[?]args)
{intn=0,m,j,i;
for(i=3;i<=100;i+=2) //外層循環(huán)
{m=(int)Math.sqrt((double)i);
for(j=2;j<=m;j++) //內(nèi)嵌循環(huán)
if((i%j)==0)break; //內(nèi)嵌循環(huán)結(jié)束
if(j>=m+1)
{
if(n%6==0)System.out.println(“\n”);
//換行控制
System.out.print(i+“”);n++;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年江蘇能達(dá)私募基金管理有限公司公開招聘工作人員備考題庫附答案詳解
- 會議宣傳與媒體報道制度
- 2026年財達(dá)證券股份有限公司天津獅子林大街證券營業(yè)部招聘備考題庫帶答案詳解
- 南昌大學(xué)鄱陽湖教育部環(huán)境與資源利用教育部重點實驗室2025年科研助理招聘備考題庫及答案詳解參考
- 企業(yè)財務(wù)預(yù)算與審核制度
- 2026年浙江空港數(shù)字科技有限公司工程項目部工程項目管理員(勞務(wù)派遣)招聘備考題庫及答案詳解1套
- 2026年黃山市徽州國有投資集團(tuán)有限公司招聘工作人員備考題庫含答案詳解
- 養(yǎng)老院入住資格審查制度
- 2026年浦發(fā)銀行總行社會招聘備考題庫帶答案詳解
- 2026年獅山中心小學(xué)道德與法治鎮(zhèn)聘教師招聘備考題庫含答案詳解
- 2024年08月北京2024年建信養(yǎng)老金管理有限責(zé)任公司校園招考筆試歷年參考題庫附帶答案詳解
- 2024年延安市市直事業(yè)單位選聘工作人員筆試真題
- 房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)(2024版)宣傳畫冊
- 2020高職院校教學(xué)能力比賽大學(xué)語文課程實施報告(定)
- 長期合作協(xié)議書合同書
- 浙江省小型液化天然氣氣化站技術(shù)規(guī)程
- ?;钒踩芾砼嘤?xùn)課件
- 小兒鞘膜積液
- 畢業(yè)設(shè)計粘土心墻土石壩設(shè)計含計算書cad圖
- 6工程竣工驗收交付證明書
- 《俠客風(fēng)云傳前傳》支線流程攻略1.0.2.4
評論
0/150
提交評論