Java程序設(shè)計(jì)教程(施霞萍)第三章課件_第1頁(yè)
Java程序設(shè)計(jì)教程(施霞萍)第三章課件_第2頁(yè)
Java程序設(shè)計(jì)教程(施霞萍)第三章課件_第3頁(yè)
Java程序設(shè)計(jì)教程(施霞萍)第三章課件_第4頁(yè)
Java程序設(shè)計(jì)教程(施霞萍)第三章課件_第5頁(yè)
已閱讀5頁(yè),還剩76頁(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)介

Java程序設(shè)計(jì)教程1第三章第三章Java的結(jié)構(gòu)化程序設(shè)計(jì)

結(jié)構(gòu)化程序設(shè)計(jì)有三種基本程序流程結(jié)構(gòu):順序(sequence)結(jié)構(gòu)、選擇(selection)結(jié)構(gòu)和循環(huán)(loop)結(jié)構(gòu)。若是在程序中沒(méi)有給出特別的執(zhí)行目標(biāo),系統(tǒng)則默認(rèn)自上而下一行一行地執(zhí)行該程序,但是事物的發(fā)展往往不會(huì)遵循早就設(shè)想好的軌跡進(jìn)行,因此,所設(shè)計(jì)的程序還需要能夠具有在不同的條件下處理不同問(wèn)題以及當(dāng)需要進(jìn)行一些相同的重復(fù)操作時(shí),如何能省時(shí)省力地解決問(wèn)題的能力。在本章中,我們將通過(guò)對(duì)Java程序的基本流程結(jié)構(gòu)的學(xué)習(xí),使我們編寫(xiě)出的程序具有這樣的能力。

2第三章第一節(jié)順序結(jié)構(gòu)及基本語(yǔ)句第二節(jié)選擇結(jié)構(gòu)第三節(jié)循環(huán)結(jié)構(gòu)第四節(jié)轉(zhuǎn)移語(yǔ)句第五節(jié)方法第六節(jié)數(shù)組第三章Java的結(jié)構(gòu)化程序設(shè)計(jì)3第三章第一節(jié)順序結(jié)構(gòu)及基本語(yǔ)句一.順序結(jié)構(gòu)

系統(tǒng)默認(rèn)自上而下一行一行地執(zhí)行程序,這類程序的結(jié)構(gòu)就稱為順序結(jié)構(gòu)。順序結(jié)構(gòu)在我們所設(shè)計(jì)的程序中是最常使用到的結(jié)構(gòu)流程,因?yàn)榇_實(shí)有很多程序基本上都是依照這種自上而下的流程來(lái)設(shè)計(jì)的。這種結(jié)構(gòu)的流程圖如右圖所示。開(kāi)始語(yǔ)句1語(yǔ)句2語(yǔ)句n結(jié)束4第三章二.基本語(yǔ)句

1.賦值語(yǔ)句賦值語(yǔ)句使用等號(hào)操作符“=”。它的意思是“取得等號(hào)右邊的值,把它復(fù)制給左邊的變量。右值可以是任何常數(shù)、已經(jīng)有值的變量或者表達(dá)式。但左值必須是一個(gè)明確的、已命名的變量。也就是說(shuō),它必須有一個(gè)物理空間以存儲(chǔ)等號(hào)右邊的值。舉例來(lái)說(shuō),可將一個(gè)常數(shù)賦給一個(gè)變量:

a=2;5第三章例3.1.1:賦值語(yǔ)句示例,實(shí)現(xiàn)兩個(gè)整數(shù)的交換:publicclassExchange{publicstaticvoidmain(Stringargs[]){

inta,b,t;a=2;b=3;System.out.print("a="+a+""+"b="+b);t=a;a=b;b=t;System.out.print("a="+a+""+"b="+b);}}publicstaticvoidmain(String

args[])是一個(gè)比較特殊的方法,所有java程序的運(yùn)行起點(diǎn)就是這個(gè)方法,書(shū)寫(xiě)格式固定。

public:公共方法,誰(shuí)都可以訪問(wèn)。

static靜態(tài)方法,表示不需要對(duì)象就可以訪問(wèn)的意思。

void:返回值類型是無(wú)類型。

main方法名字,這個(gè)名字必須是main。

Stringargs[]這個(gè)方法接受的參數(shù),一個(gè)String數(shù)組。6第三章

2.

輸入語(yǔ)句在程序中,通過(guò)用戶從鍵盤(pán)輸入數(shù)據(jù),既是程序本身的需要,又可以增加程序與用戶之間的交流互動(dòng)。因此在這里要向大家介紹如何設(shè)計(jì)讓用戶利用鍵盤(pán)輸入數(shù)據(jù)程序。但由于采用這樣的方法只是適應(yīng)于運(yùn)行在DOS提示符環(huán)境下,故真正在程序中的使用并不多,畢竟大多數(shù)程序是運(yùn)行在Web瀏覽器或?qū)iT(mén)的用戶界面環(huán)境下,而這種運(yùn)行環(huán)境有專門(mén)的用戶輸入方式。7第三章在Java中提供用戶鍵盤(pán)輸入環(huán)境的程序由以下(紅色字部分)語(yǔ)句固定組合而成:

importjava.io.*;

publicclass類名稱

{

publicstaticvoidmain(Stringargs[])

throwsIOException

{

BufferedReader

buf;//定義buf為BufferedReader類的對(duì)象變量

Stringstr;//定義str為string類型的變量

……

buf=newBufferedReader(new

InputStreamReader(System.in));

//向內(nèi)存申請(qǐng)分配存儲(chǔ)空間,并初始化buf對(duì)象

str=buf.readLine();

//輸入字符串至變量str存放

……

}

}

Java提供了很多供編程使用的類,其中BufferedReader類和InputStreamReader類就封裝在java.io包中,java.io是輸入輸出流的文件包,在程序開(kāi)始處必須使用import語(yǔ)句加載該包,才能使用這兩個(gè)類。throws語(yǔ)句聲明main()方法可能引發(fā)輸入輸出異常,這些異常要求調(diào)用main()中的程序進(jìn)行處理。8第三章例3.1.2:從鍵盤(pán)接收用戶輸入的字符串并輸出該字符串。

程序如下:

importjava.io.*;//裝載java.io類庫(kù)里的所有類

publicclassInputStr

{

publicstaticvoidmain(Stringargs[])throwsIOException

{

BufferedReader

buf;

Stringstr;

buf=newBufferedReader(new

InputStreamReader(System.in));

System.out.print(“Inputastring:”);

str=buf.readLine();//將輸入的文字指定給字符串變量str存放

System.out.println(“string=”+str);//輸出字符串

}

}

Java在此把從鍵盤(pán)輸入的數(shù)據(jù)一律看作是字符串,因此若要從鍵盤(pán)輸入并讓系統(tǒng)認(rèn)可是數(shù)值行數(shù)據(jù),必須經(jīng)過(guò)轉(zhuǎn)換。9第三章例3.1.3:由鍵盤(pán)輸入整數(shù)示例:

程序如下:

importjava.io.*;

publicclassInputNum

{

publicstaticvoidmain(Stringargs[])throwsIOException

{

intnum;

Stringstr;

BufferedReader

buf;

buf=newBufferedReader(new

InputStreamReader(System.in));

System.out.print(“Inputaninteger:”);

str=buf.readLine();//將輸入的文字指定給字符串變量str存放

num=Integer.parseInt(str);

/*parseInt是Integer類的一個(gè)靜態(tài)方法,可以直接調(diào)用而

不用實(shí)例化,將str轉(zhuǎn)成int類型后指定給num存放;java.lang包是

自動(dòng)的加載的,Integer類是java.lang包中的一個(gè)數(shù)據(jù)類型類。*/

System.out.println("Theintegeris"+num);

}

}

10第三章

在前面的程序中:num=Integer.parseInt(str)

是起數(shù)據(jù)轉(zhuǎn)換作用的語(yǔ)句,將字符串轉(zhuǎn)換為int型的數(shù)值。若是想轉(zhuǎn)換成其他類型的數(shù)值,則可利用下表中的方法。

數(shù)據(jù)類型轉(zhuǎn)換的方法LongLong.parseLong()IntInteger.parseInteger()ShortShort.parseShort()ByteByte.parseByte()DoubleDouble.parseDouble()FloatFloat.parseFloat()11第三章第二節(jié)選擇結(jié)構(gòu)

選擇結(jié)構(gòu)是根據(jù)條件成立與否,再?zèng)Q定執(zhí)行語(yǔ)句的結(jié)構(gòu),它的作用是讓程序更具有智能性。一.if語(yǔ)句

if語(yǔ)句是最簡(jiǎn)單的選擇結(jié)構(gòu)語(yǔ)句,格式如下:

if<表達(dá)式>

{

語(yǔ)句塊

}

false其中表達(dá)式的設(shè)置是很重要的,它返回邏輯(布爾)值,如果true則進(jìn)入{}部分的語(yǔ)句塊處理。否則跳過(guò)該{}部分,執(zhí)行下面的語(yǔ)句。如果{語(yǔ)句塊}中只有一句語(yǔ)句,則左右大括號(hào)可以不寫(xiě)。if語(yǔ)句又稱為單分支結(jié)構(gòu)語(yǔ)句,它的執(zhí)行流程如右上圖所示:true表達(dá)式語(yǔ)句塊truefalse12第三章例3.2.1:使用if語(yǔ)句判別兩數(shù)是否相等:

程序如下:

publicclassIfTest

{

publicstaticvoidmain(Stringargs[])

{

inta=3;

intb=3;

if(a==b)

System.out.println("aequalsb");

}

}

該程序中表達(dá)式(a==b)中的關(guān)系運(yùn)算符“==”不可以寫(xiě)成“=”。

13第三章例3.2.2:if語(yǔ)句的重復(fù)使用:從鍵盤(pán)出入三個(gè)數(shù),將其按從小到大的順序輸出。程序如下:importjava.io.*;publicclassCompIf{publicstaticvoidmain(Stringargs[])throwsIOException{

inta,b,c,t;Stringstr;

BufferedReader

buf;

buf=newBufferedReader(new

InputStreamReader(System.in));System.out.print("Inputfirstnumber:");

str=buf.readLine();a=Integer.parseInt(str);System.out.print("Inputsecondnumber:");

str=buf.readLine();b=Integer.parseInt(str);System.out.print("Inputthirdnumber:");

str=buf.readLine();c=Integer.parseInt(str);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}//交換兩個(gè)變量的值

System.out.print(a+",");

System.out.print(b+",");System.out.print(c);}}14第三章二.if-else語(yǔ)句

if-else語(yǔ)句的操作比if語(yǔ)句多了一步:如果表達(dá)式的值為假,則程序進(jìn)入else部分的語(yǔ)句塊(語(yǔ)句塊2)處理。故它又被稱為雙分支結(jié)構(gòu)語(yǔ)句。if-else語(yǔ)句語(yǔ)法格式為:

if<表達(dá)式>{

語(yǔ)句塊1}else{

語(yǔ)句塊2}

if-else語(yǔ)句的執(zhí)行流程如右圖所示:

truefalse表達(dá)式語(yǔ)句塊2語(yǔ)句塊115第三章例3.2.3:通過(guò)鍵盤(pán)輸入兩個(gè)整數(shù),用if-else結(jié)構(gòu)判別這兩個(gè)數(shù)是否相等,并分別輸出不同信息:程序如下:importjava.io.*;publicclassIfElseTest{publicstaticvoidmain(Stringargs[])throwsIOException{

inta,b;Stringstr;

BufferedReader

buf;

buf=newBufferedReader(new

InputStreamReader(System.in));System.out.print("Inputaninteger:");

str=buf.readLine();a=Integer.parseInt(str);//將str轉(zhuǎn)成int類型后指定給a存放

System.out.print("Inputanotherinteger:");

str=buf.readLine();//再次調(diào)用方法接收鍵盤(pán)數(shù)據(jù)

b=Integer.parseInt(str);//將str轉(zhuǎn)成int類型后指定給b存放

if(a==b)

System.out.println("aequalsb");else

System.out.println("adoesn'tequalb");}}16第三章例3.2.4:輸入一個(gè)年份,由程序判斷該年是否為閏年。判斷方法:能被4整除且不能被100整除,或能被400整除的年份才是閏年。程序如下::importjava.io.*;publicclassLeapYear{publicstaticvoidmain(Stringargs[])throwsIOException{

intyear;Stringstr;

BufferedReader

buf;

buf=newBufferedReader(new

InputStreamReader(System.in));

System.out.println("Inputtheyear:");

str=buf.readLine();year=Integer.parseInt(str);if(year%4==0&&year%100!=0||year%400==0)

System.out.println("year"+year+"isaleapyear.");else

System.out.println("year"+year+"isnotaleapyear.");}}17第三章三.

if-elseif語(yǔ)句:

if-elseif語(yǔ)句用于處理多個(gè)分支的情況,因此又稱多分支結(jié)構(gòu)語(yǔ)句。其語(yǔ)法格式為:

if<表達(dá)式1>{語(yǔ)句塊1}elseif<表達(dá)式2>{語(yǔ)句塊2}

……elseif<表達(dá)式n>{語(yǔ)句塊n}[else

{語(yǔ)句塊n+1}]if-elseif語(yǔ)句的執(zhí)行流程如右圖所示。

truetruetruefalsefalsefalse表達(dá)式1表達(dá)式2表達(dá)式n語(yǔ)句塊1語(yǔ)句塊2語(yǔ)句塊n語(yǔ)句塊n+1……18第三章importjava.io.*;publicclassSignClass{publicstaticvoidmain(Stringargs[])throwsIOException{doublex;

inty;Stringstr;

BufferedReader

buf;

buf=newBufferedReader(new

InputStreamReader(System.in));System.out.print("Inputxis:");

str=buf.readLine();x=Double.parseDouble(str);//把str轉(zhuǎn)換成double類型指定給x存放

if(x>0)y=1;elseif(x==0)y=0;elsey=-1;System.out.print("y="+y);}}例3.2.5:用if-elseif語(yǔ)句實(shí)現(xiàn)下面的符號(hào)函數(shù):程序如下:19第三章四.if語(yǔ)句的嵌套在if語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句稱為if語(yǔ)句嵌套,這是程序設(shè)計(jì)中經(jīng)常使用的技術(shù)。例如現(xiàn)在有三個(gè)整數(shù)a、b、c,要判別它們能否構(gòu)成三角形的三條邊,則首先應(yīng)判別這三個(gè)整數(shù)是否都大于零,然后才判別其任意兩個(gè)數(shù)之和是否大于第三個(gè)數(shù),其程序塊為:

if(a>0)&&(b>0)&&(c>0){if(a+b>c)&&(a+c>b)&&(b+c>a)

System.out.println("Yes");

else

System.out.println("No");}else

System.out.println("No");20第三章五.switch語(yǔ)句

switch語(yǔ)句是Java支持的另一種多分支結(jié)構(gòu)語(yǔ)句,使用switch語(yǔ)句進(jìn)行程序設(shè)計(jì),將使程序的結(jié)構(gòu)更簡(jiǎn)練,表達(dá)更為清晰。switch語(yǔ)句語(yǔ)法結(jié)構(gòu)如下:switch<表達(dá)式>{case數(shù)值1:{語(yǔ)句塊1}break;case數(shù)值2:{語(yǔ)句塊2}break;

……

case數(shù)值n:{語(yǔ)句塊n}break;[default:

{

語(yǔ)句塊n+1}]

falsetruetruetruefalsefalse數(shù)值1數(shù)值2數(shù)值n語(yǔ)句塊1語(yǔ)句塊2語(yǔ)句塊ndefault………breakbreakbreakswitch語(yǔ)句的流程圖如上圖所示。表達(dá)式的值為int、byte、short和char類型數(shù)值i必須是常量break的作用是當(dāng)執(zhí)行完一個(gè)case分支后,終止switch結(jié)構(gòu)的執(zhí)行。如果沒(méi)有break,則繼續(xù)執(zhí)行后面的case子句。default子句可選,當(dāng)表達(dá)式的值與任何case子句中的值都不匹配時(shí),執(zhí)行default子句,如果沒(méi)有default,則程序直接跳出switch語(yǔ)句。21第三章switch語(yǔ)句說(shuō)明:

switch后面的表達(dá)式只能返回如int、byte、short和char類型的值,多分支結(jié)構(gòu)把表達(dá)式返回的值依次與每個(gè)case子句中的值相比較。如果遇到匹配的值,則執(zhí)行該case后面的語(yǔ)句塊;case子句中的數(shù)值I(I=1,2,……,n)必須是常量,且對(duì)應(yīng)于執(zhí)行不同操作的case子句中的數(shù)值I(I=1,2,……,n)應(yīng)是不同的;

default子句為可選。當(dāng)表達(dá)式的值與任何case子句中的值都不匹配時(shí),程序執(zhí)行default后面的語(yǔ)句;當(dāng)表達(dá)式的值與任何case子句中的值都不匹配且沒(méi)有default子句,則程序?qū)⒉粓?zhí)行任何操作,直接跳出switch語(yǔ)句。

break語(yǔ)句的作用是當(dāng)執(zhí)行完一個(gè)case分支后,終止switch結(jié)構(gòu)的執(zhí)行。因?yàn)閏ase子句只是起到一個(gè)標(biāo)號(hào)的作用,用來(lái)查找入口并從此處開(kāi)始執(zhí)行。如果沒(méi)有break語(yǔ)句,當(dāng)程序執(zhí)行完匹配的case子句塊后,還會(huì)執(zhí)行后面的case子句塊,這是不允許的。因此應(yīng)該在每一個(gè)case分支后,用break語(yǔ)句終止后面的case分支語(yǔ)句塊的執(zhí)行。22第三章例3.2.6:用switch語(yǔ)句處理表達(dá)式中的運(yùn)算符,并輸出運(yùn)算結(jié)果:程序如下:publicclassOperatorClass{publicstaticvoidmain(Stringargs[]){

inta=80,b=9;charoper='/';switch(oper){case'+':

System.out.println(a+"+"+b+"="+(a+b));break;//輸出a+bcase'-':

System.out.println(a+"-"+b+"="+(a-b));break;//輸出a-bcase'*':

System.out.println(a+"*"+b+"="+(a*b));break;//輸出a*bcase'/':

System.out.println(a+"/"+b+"="+((float)a/b));break;//輸出a/bdefault:

System.out.println("Unknownoperator!!");//輸出字符串

}}}可以改為由鍵盤(pán)輸入一個(gè)字符:首先在程序開(kāi)始處增加importjava.io.*;然后將charoper='/';改為charoper;oper=(char)System.in.read();System.in.read()可以實(shí)現(xiàn)輸入字符,返回的是輸入數(shù)值的ASCII(一個(gè)int

整數(shù))

23第三章例3.2.7:使用switch語(yǔ)句與if語(yǔ)句的程序:由鍵盤(pán)輸入年份與月份,由程序判別輸出該年的那個(gè)月有多少天(本程序所創(chuàng)建的類中有兩個(gè)方法,其中第二個(gè)方法的程序清單在后一頁(yè)上)。

程序如下:

importjava.io.*;classDayCounter{//DayCounter的訪問(wèn)權(quán)限為默認(rèn)值

publicstaticvoidmain(String[]arguments)throwsIOException{

intyear,month;Stringstr;

BufferedReader

buf;

buf=newBufferedReader(new

InputStreamReader(System.in));System.out.print("Inputyearnumber:");

str=buf.readLine();year=Integer.parseInt(str);System.out.print("Inputthemonthnumber:");

str=buf.readLine();month=Integer.parseInt(str);

System.out.println(month+"/"+year+"has"+countDays(month,year)+"days.");}

24第三章staticint

countDays(intmonth,intyear){

intcount=-1;switch(month){case1:case3:case5:case7:case8:case10:case12:count=31;break;case4:case6:case9:case11:count=30;break;case2:if(year%4==0&&year%100!=0)||(year%400==0)count=29;elsecount=28;}returncount;}}

25第三章第三節(jié)循環(huán)結(jié)構(gòu)

在程序設(shè)計(jì)過(guò)程中,當(dāng)在滿足一定條件的前提下需要反復(fù)執(zhí)行一些相同的操作時(shí),使用循環(huán)結(jié)構(gòu)語(yǔ)句便是最好的選擇了。Java語(yǔ)言提供的循環(huán)結(jié)構(gòu)語(yǔ)句包括for語(yǔ)句、while語(yǔ)句和dowhile語(yǔ)句。作為一個(gè)循環(huán)結(jié)構(gòu)來(lái)說(shuō),應(yīng)該包含如下內(nèi)容:賦初值部分:用于設(shè)置循環(huán)控制的一些初始條件。循環(huán)體部分:需要反復(fù)執(zhí)行的代碼(塊),當(dāng)然也可以是一句單一的語(yǔ)句。循環(huán)控制變量增減方式部分:用于更改循環(huán)控制狀況。

判斷條件(也稱循環(huán)終止條件)部分:是一個(gè)返回邏輯(布爾)值的表達(dá)式,用于判斷是否滿足循環(huán)終止條件,以便及時(shí)結(jié)束循環(huán)。26第三章

一.for循環(huán)語(yǔ)句

for循環(huán)語(yǔ)句的使用適應(yīng)于明確知道重復(fù)執(zhí)行次數(shù)的情況,其語(yǔ)句格式如下:for(賦初值;判斷條件;循環(huán)控制變量增減方式)

{

(循環(huán)體)語(yǔ)句塊;

}for循環(huán)的執(zhí)行流程如右圖所示:1.

第一次進(jìn)入for循環(huán)時(shí),對(duì)循環(huán)控制變量賦初值。2.

根據(jù)判斷條件的內(nèi)容檢查是否要繼續(xù)執(zhí)行循環(huán),如果判斷條件為真,繼續(xù)執(zhí)行循環(huán),如條件為假,則結(jié)束循環(huán)執(zhí)行下面的語(yǔ)句。

3.

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

判斷條件循環(huán)體truefalse賦循環(huán)控制變量初值循環(huán)控制變量增(減)值27第三章程序如下:publicclassSumClass{publicstaticvoidmain(Stringargs[]){

inti,sum=0;for(i=1;i<=100;i++)sum+=i;//計(jì)算

System.out.println("1+2+...+100="+sum);//輸出結(jié)果

}}例3.3.1:利用for循環(huán)語(yǔ)句計(jì)算從1累加到100的結(jié)果。

for循環(huán)語(yǔ)句格式中的三項(xiàng)內(nèi)容(賦初值;判斷條件;循環(huán)控制變量增減方式)可以視不同情況缺省一個(gè)、兩個(gè),甚至全缺。28第三章程序如下:

publicclassFibonacci{publicstaticvoidmain(Stringargs[]){

intm=1,n=1;

for(inti=2;i<=15;i++){System.out.print(m+“”+n+“”);//每次輸出兩個(gè)數(shù)據(jù)

m=m+n;n=m+n;if(i*2%10==0)//控制輸出格式

System.out.print("\n");}}}例3.3.2:利用for循環(huán)輸出斐波那契序列的前30項(xiàng)數(shù)據(jù)。且每十個(gè)數(shù)據(jù)輸出

一行。(說(shuō)明:斐波那契序列的第一、第二兩項(xiàng)都是1,后續(xù)各項(xiàng)是各項(xiàng)前兩項(xiàng)之和。)

其運(yùn)算公式為:F1=1(n=1)

F2=1(n=2)

Fn=Fn-1+Fn-2(n≥3)

29第三章

二.while循環(huán)語(yǔ)句

在不知道一個(gè)循環(huán)體會(huì)被重復(fù)執(zhí)行多少次的情況下,可以選擇使用while循環(huán)結(jié)構(gòu)語(yǔ)句,while語(yǔ)句的語(yǔ)法格式如下:

while(判斷條件)

{

(循環(huán)體)語(yǔ)句塊;循環(huán)控制變量增(減)值;

}判斷條件循環(huán)體truefalseWhile初始化循環(huán)控制變量增(減)值while循環(huán)的執(zhí)行流程如下:1.在進(jìn)入while循環(huán)前,對(duì)循環(huán)控制變量賦初值。2.根據(jù)判斷條件檢查是否要繼續(xù)執(zhí)行循環(huán),如果判斷條件為真,繼續(xù)執(zhí)行循環(huán),若條件為假,則結(jié)束循環(huán)執(zhí)行下面的語(yǔ)句。3.執(zhí)行完循環(huán)體后,系統(tǒng)會(huì)根據(jù)循環(huán)控制變量增減方式,更改循環(huán)控制變量的值,再回到步驟2重新判斷是否繼續(xù)執(zhí)行循環(huán)。while循環(huán)的執(zhí)行流程如右上圖所示。

30第三章程序如下:publicclassLimit{publicstaticvoidmain(Stringargs[]){intn=0;floatsum=0;while(sum<=10){n+=1;sum+=1.0/n;}

System.out.print(“n="+n);

}}

10131211>++++n……例3.3.3:編程序計(jì)算當(dāng)n為多大時(shí)下列不等式成立。31第三章

三.dowhile循環(huán)語(yǔ)句

dowhile循環(huán)的語(yǔ)法格式如下:

do{

(循環(huán)體)語(yǔ)句塊;循環(huán)控制變量增(減)值;

}while(判斷條件)

dowhile循環(huán)的執(zhí)行流程如右圖所示。

dowhile循環(huán)語(yǔ)句功能與while語(yǔ)句類似,但dowhile語(yǔ)句的循環(huán)終止判斷是在循環(huán)體之后執(zhí)行,也就是說(shuō),它總是先執(zhí)行一次循環(huán)體,然后判斷條件表達(dá)式的值是否為真,若為真,則繼續(xù)執(zhí)行循環(huán)體;否則循環(huán)到此結(jié)束。與dowhile語(yǔ)句所不同的是,while語(yǔ)句如果開(kāi)始時(shí)的判別表達(dá)式為假,則可能一次都不執(zhí)行循環(huán)體而直接結(jié)束循環(huán)。falsetrue判斷條件循環(huán)體;循環(huán)控制變量增(減)值;賦循環(huán)控制變量初值32第三章程序如下:publicclassSquareRoot{publicstaticvoidmain(Stringargs[]){

intn=0;longm=1;do{

System.out.println("n="+n+"\t"+"10^"+n+"\t"+"squareroot="+Math.pow(m,1.0/2));

n=n+1;m*=10;}while(n<=6);}}

Math類在java.lang包中,默認(rèn)已經(jīng)添加,不用import,注意Math大寫(xiě)。例3.3.4:編程序計(jì)算1到1000000之間10的方冪的平方根(即計(jì)算100、101、102……的平方根)。33第三章四.循環(huán)語(yǔ)句的嵌套當(dāng)循環(huán)語(yǔ)句的循環(huán)體中又出現(xiàn)循環(huán)語(yǔ)句時(shí),就稱為循環(huán)嵌套,Java語(yǔ)言支持循環(huán)嵌套,如for循環(huán)嵌套、while循環(huán)嵌套,當(dāng)然也可以使用混合嵌套。如右圖便是while循環(huán)與for循環(huán)混合嵌套的流程圖。

內(nèi)循環(huán)體外循環(huán)體truefalse判斷條件While初始化循環(huán)控制變量增(減)值判斷條件循環(huán)體賦循環(huán)控制變量初值循環(huán)控制變量增(減)值falsetrue34第三章程序如下:publicclassMultiTable{publicstaticvoidmain(Stringargs[]){

inti,j;for(i=1;i<=9;i++) //外層循環(huán)

{for(j=i;j<=9;j++)//內(nèi)層循環(huán)

System.out.print(i+"*"+j+"="+(i*j)+"\t");

System.out.println();}}}

例3.3.5:輸出九九乘法表

35第三章程序如下:publicclassEvenNumber{publicstaticvoidmain(Stringargs[]){

inti,j;for(i=1;i<=100;i++) {if(i%2==0) {System.out.print(i+"");if(i%10==0)System.out.println();}}}}

例3.3.6:輸出1到100之間的所有偶數(shù),并控制每行輸出十個(gè)偶數(shù)。

在程序設(shè)計(jì)過(guò)程中,選擇結(jié)構(gòu)語(yǔ)句與循環(huán)結(jié)構(gòu)語(yǔ)句互相嵌套使用也是相當(dāng)常見(jiàn)的36第三章

程序如下:importjava.io.*;publicclassPrime{publicstaticvoidmain(Stringargs[])throwsIOException{

inti;booleanp;

BufferedReader

buf;Stringstr;

buf=newBufferedReader(new

InputStreamReader(System.in));System.out.print("Inputmis:");

str=buf.readLine();

intm=Integer.parseInt(str);p=true;

for(i=2;i<m;i++)if(m%i==0)p=false;if(p==true)

System.out.println(m+"isaprimenumber.");else

System.out.println(m+"isnotaprimenumber.");}}

例3.3.7:編一程序,從鍵盤(pán)輸入一個(gè)自然數(shù),判別其是否為素?cái)?shù)(只能被1和其本身整除的自然數(shù)稱為素?cái)?shù))。

37第三章第四節(jié)轉(zhuǎn)移語(yǔ)句

Java的轉(zhuǎn)移語(yǔ)句用在選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中,使程序員更方便地控制程序執(zhí)行的方向。38第三章一.break語(yǔ)句

true賦循環(huán)控制變量初值判斷條件1語(yǔ)句塊;

;判斷條件2truefalsebreak;;語(yǔ)句塊;false循環(huán)控制變量增(減)值循環(huán)主體

在Java中可以用break語(yǔ)句強(qiáng)行退出循環(huán),繼續(xù)執(zhí)行循環(huán)外的下一個(gè)語(yǔ)句,以for循環(huán)流程為例:在循環(huán)主體中有break語(yǔ)句時(shí),當(dāng)程序執(zhí)行到break,即會(huì)退出循環(huán)主體,到循環(huán)外層繼續(xù)執(zhí)行。

39第三章程序如下:publicclassBreakSt{publicstaticvoidmain(Stringargs[]){inti;for(i=1;i<=10;i++){if(i%3==0) break;//跳出循環(huán)體,不再執(zhí)行循環(huán)

System.out.println("i="+i);//輸出i的值

}

System.out.println("whenloopbroken,i="+i);}}程序運(yùn)行結(jié)果:i=1i=2whenloopbroken,i=3例3.4.1:輸出1到10之間所有不能被3整除的自然數(shù)。從程序運(yùn)行結(jié)果可以看到:當(dāng)程序進(jìn)入第三次循環(huán),即i等于3時(shí),滿足了if判別條件,因此執(zhí)行break語(yǔ)句,不再繼續(xù)執(zhí)行循環(huán),退出循環(huán)時(shí)循環(huán)控制變量i的值為3,因此此例使用break語(yǔ)句顯然不能得到我們所要的結(jié)果,我們將向大家介紹另一個(gè)轉(zhuǎn)向語(yǔ)句continue語(yǔ)句來(lái)解決上述問(wèn)題。40第三章二.continue語(yǔ)句

程序運(yùn)行到continue語(yǔ)句時(shí),就會(huì)停止本次循環(huán)體中剩余語(yǔ)句的執(zhí)行,而回到循環(huán)的開(kāi)始處繼續(xù)執(zhí)行循環(huán)。同樣以for循環(huán)流程為例:在循環(huán)主體中有continue語(yǔ)句時(shí),當(dāng)程序執(zhí)行到continue,則跳過(guò)循環(huán)主體中continue語(yǔ)句后面的部分,回到循環(huán)語(yǔ)句的開(kāi)始,執(zhí)行下一輪循環(huán)。true賦循環(huán)控制變量初值判斷條件1語(yǔ)句塊;判斷條件2truefalsecontinue;語(yǔ)句塊;false循環(huán)控制變量增(減)值循環(huán)主體41第三章程序如下:publicclassContinueSt{publicstaticvoidmain(Stringargs[]){

inti;for(i=1;i<=10;i++){if(i%3==0) continue;//跳出本次循環(huán),進(jìn)入下一輪循環(huán)

System.out.println("i="+i);}

System.out.println("whenbroken,i="+i);}}

例3.4.2:把例3-17程序中的break語(yǔ)句改為continue。42第三章第五節(jié)數(shù)組(43-67略過(guò))

數(shù)組(array)是由一組相同類型的變量所組成的數(shù)據(jù)類型。它們以一個(gè)共同的名字表示,數(shù)組中的成員稱為該數(shù)組的元素,數(shù)組元素以下標(biāo)來(lái)標(biāo)示其所在的位置。數(shù)組依存放元素的復(fù)雜程度,分為一維數(shù)組、二維數(shù)組以及多維(三維以上)數(shù)組。首先介紹一維數(shù)組。43第三章一.一維數(shù)組的聲明與引用

一維數(shù)組聲明語(yǔ)法格式如下:

type數(shù)組名[]=newtype[個(gè)數(shù)]

當(dāng)按上述的語(yǔ)法聲明格式聲明數(shù)組后,系統(tǒng)會(huì)分配一塊連續(xù)的內(nèi)存空間,供該數(shù)組使用。例如:

int

myarray[]=newint[10];

表示聲明了一個(gè)一維整型數(shù)組myarray,系統(tǒng)為此配置一塊內(nèi)存空間供該數(shù)組使用,其元素個(gè)數(shù)為10。要使用數(shù)組里的元素,可以通過(guò)利用其下標(biāo)來(lái)達(dá)到目的,只有一個(gè)下標(biāo)值的數(shù)組就稱為一維數(shù)組。Java數(shù)組的下標(biāo)編號(hào)從0開(kāi)始,以上述myarray數(shù)組為例,myarray[0]代表該數(shù)組第1個(gè)元素,myarray[1]代表該數(shù)組第2個(gè)元素,以此類推,myarray[9]代表該數(shù)組第10個(gè)元素。注意:如果聲明的數(shù)組元素個(gè)數(shù)為n,則數(shù)組元素下標(biāo)的變化只能是0~n-1。對(duì)于myarray數(shù)組來(lái)說(shuō),如果在程序中出現(xiàn)了對(duì)myarray[10]的訪問(wèn),則會(huì)引起下標(biāo)越界的錯(cuò)誤。44第三章例3.5.1:數(shù)組的聲明與輸出:程序如下:publicclassFirstArray{publicstaticvoidmain(Stringargs[]){

inti;

int

aa[]=newint[5];//聲明一個(gè)整型數(shù)組aa,其元素個(gè)數(shù)為5for(i=0;i<5;i++)//輸出數(shù)組的內(nèi)容

System.out.print("aa["+i+"]="+aa[i]+",\t");

System.out.println("\nlengthofarrayais"+aa.length);

//輸出數(shù)組元素個(gè)數(shù)

}}我們經(jīng)常使用循環(huán)的方式來(lái)實(shí)現(xiàn)數(shù)組的輸出。在使用數(shù)組過(guò)程中,經(jīng)常要用到數(shù)組的元素個(gè)數(shù)這一數(shù)值,數(shù)組的元素個(gè)數(shù)又被稱為該數(shù)組的長(zhǎng)度。在程序中可以使用數(shù)組名.Length

的語(yǔ)句表達(dá)方式來(lái)獲得數(shù)組的長(zhǎng)度值。45第三章二.?dāng)?shù)組的賦值

對(duì)數(shù)組的賦值有如下方法:1.1.

在聲明時(shí)直接賦值,語(yǔ)法格式為:type數(shù)組名[]={數(shù)值1,數(shù)值2,……,數(shù)值n};

在大括號(hào)內(nèi)的數(shù)值依次賦值給數(shù)組中的第1~n個(gè)元素。另外,在賦值聲明的時(shí)候,不需要給出數(shù)組的長(zhǎng)度,編譯器會(huì)視所給的數(shù)值個(gè)數(shù)來(lái)決定數(shù)組的長(zhǎng)度,例如:

intmm[]={2,4,6,8,10,12,14,16,18,20}

在上面的語(yǔ)句中,聲明了一個(gè)數(shù)組mm,雖然沒(méi)有特別指名mm的長(zhǎng)度,但由于括號(hào)里的數(shù)值有10個(gè),編譯器會(huì)分別依序指定給各元素存放,使mm[0]=2,mm[1]=4,……mm[9]=20。

2.若是對(duì)數(shù)組的元素進(jìn)行有規(guī)律的賦值,則可以使用循環(huán)的方式進(jìn)行:

46第三章例3.5.2:數(shù)組的賦值示例

程序如下:

publicclassGNum

{

publicstaticvoidmain(Stringargs[])

{

inti;

int

aa[]=newint[5]; //聲明一個(gè)整數(shù)數(shù)組aa,其元素個(gè)數(shù)為5

for(i=0;i<5;i++)//分別給數(shù)組元素賦值并輸出數(shù)組的內(nèi)容

{

aa[i]=2*i+1;

System.out.print("aa["+i+"]="+aa[i]+",\t");

}

}

}

47第三章例3.5.3:字符型數(shù)組的賦值與輸出。

程序如下:

publicclassChar{

publicstaticvoidmain(Stringargs[])

{

inti;

charstr[]={'H','e','l','l','o','!'};

for(i=0;i<str.length;i++)

System.out.print(str[i]);

}

}

48第三章例3.5.4:求出一維數(shù)組中的最大值和最小值。程序如下:publicclassMaxMin{publicstaticvoidmain(Stringargs[]){

inti,min,max;

intmm[]={65,89,42,77,62,54};//聲明整數(shù)數(shù)組mm,并設(shè)置初值

min=max=mm[0];System.out.print("Elementsinarraymmare");for(i=0;i<mm.length;i++){ System.out.print(mm[i]+""); if(mm[i]>max) //判斷最大值

max=mm[i]; if(mm[i]<min)//判斷最小值

min=mm[i];}

System.out.println("\nMaximumis"+max); //輸出最大值

System.out.println("Minimumis"+min); //輸出最小值

}}49第三章

楊輝三角型:三角型中各行中的數(shù)字正好是二項(xiàng)式a+b乘方后,展開(kāi)式中各項(xiàng)的系數(shù)。比如:a+b≠0時(shí)

(a+b)0=1(a+b)1=a+b(a+b)2=a2+2ab+b2(a+b)3=a3+3a2b+3ab2+b3

…………

仔細(xì)觀察此三角型,你還可以發(fā)現(xiàn)它這樣的排列規(guī)律:每下一行的數(shù)比上一行多一個(gè),兩邊都是1,中間各數(shù)都寫(xiě)在上一行兩數(shù)的中間,且等于它們的和。

11112113311464115101051161520156172135352171例3.5.5:利用一維數(shù)組輸出8行楊輝三角型。如右下圖50第三章輸出楊輝三角形程序如下:

publicclassYangHui{publicstaticvoidmain(Stringargs[]){inti;

int

yh[]=newint[8]; for(i=0;i<8;i++) {yh[i]=1;for(intj=i-1;j>0;j--)

yh[j]=yh[j-1]+yh[j];for(intj=0;j<=i;j++)

System.out.print(yh[j]+"\t");

System.out.println();}}}為簡(jiǎn)單起見(jiàn),本程序忽略輸出格式,將每一行的數(shù)組元素均放在第一列輸出。51第三章例3.5.6:用選擇法對(duì)十個(gè)數(shù)按從小到大進(jìn)行排序,然后輸出。

選擇法的思想方法是:在給定的數(shù)組中求得一個(gè)最小的數(shù),將其換到數(shù)組的第一個(gè)數(shù)的位置。然后再在第二個(gè)數(shù)到最后一個(gè)數(shù)之間求得最小數(shù),將其換到數(shù)組的第二個(gè)數(shù)的位置。以此類推,直到最后,得到的結(jié)果便是已完成的遞增序列。選擇法排序程序如下:

publicclassSort12{publicstaticvoidmain(Stringargs[]){intmp[]={8,6,12,5,14,7,21,2,9,3};

System.out.println("Theoriginal10numbers:");for(intj=0;j<mp.length;j++)System.out.print(mp[j]+"\t");

System.out.println();

for(inti=0;i<mp.length-1;i++) for(intj=i;j<mp.length;j++)if(mp[i]>mp[j]){intt=mp[i];mp[i]=mp[j];mp[j]=t;}

System.out.println("Thesorted10numbers:");for(intj=0;j<mp.length;j++)System.out.print(mp[j]+"\t");}}52第三章四.二維數(shù)組的聲明及引用在Java中,因?yàn)閿?shù)組元素可以聲明成任何類型,因此如果一維數(shù)組的元素還是一維數(shù)組的話,這種數(shù)組就被稱為二維數(shù)組。二維數(shù)組聲明語(yǔ)法格式如下:

type數(shù)組名[][]=newtype[個(gè)數(shù)][個(gè)數(shù)];例如:

intMy2array[][]=newint[5][6];

上述語(yǔ)句聲明了一個(gè)二維數(shù)組,其中[5]表示該數(shù)組有(0~4)5行,每一行有(0~5)6個(gè)元素,因此整個(gè)數(shù)組有30個(gè)元素。對(duì)于二維數(shù)組元素的賦值,同樣可以在聲明的時(shí)候進(jìn)行:例如:

int

ssa[][]={{20,25,26,22},{23,24,20,28}};聲明了一個(gè)整型的2行4列的數(shù)組,同時(shí)進(jìn)行賦值,結(jié)果如下:ssa[0][0]=20;ssa[0][1]=25;ssa[0][2]=26;ssa[0][3]=22;ssa[1][0]=23;ssa[1][1]=24;ssa[1][2]=20;ssa[1][3]=28;53第三章例3.5.7:二維數(shù)組的建立與輸出。程序如下:publicclassTwoDimArr{publicstaticvoidmain(Stringargs[]){

inti,j,sum=0;

int

ssa[][]={{20,25,26,22},{23,24,20,28}};//聲明數(shù)組并設(shè)置初值

for(i=0;i<ssa.length;i++)//ssa.length表示二維數(shù)組的行數(shù)

{for(j=0;j<ssa[i].length;j++)//ssa[i].length表示第i行的列數(shù)

System.out.print("ssa["+i+"]["+j+"]="+ssa[i][j]+"");

System.out.println();}}}54第三章Java的多維數(shù)組的聲明使用相當(dāng)靈活,它可以從最高維起分別為每一維分配內(nèi)存,對(duì)于創(chuàng)建二維數(shù)組來(lái)說(shuō),可以使用如下的更靈活的聲明方式:

typearrN[][]=newtype[arrNum1][];

arrN[0]=newtype[arrNum2];

arrN[1]=newtype[arrNum2];

……

arrN[arrNum1-1]==newtype[arrNum2];

該程序段說(shuō)明創(chuàng)建的數(shù)組第一維長(zhǎng)度是arrNum1,第二維長(zhǎng)度是arrNum2,如果第二維的大小處處一致,我們可以理解為目前創(chuàng)建的是一個(gè)矩陣數(shù)組。

55第三章另外,在Java中還可以創(chuàng)建非矩陣數(shù)組:例如:

typearrN[][]=newtype[5][];

arrN[0]=newtype[1];

arrN[1]=newtype[3];

arrN[2]=newtype[5];

arrN[3]=newtype[5];

arrN[4]=newtype[5];

arrN數(shù)組為5行,每行的元素個(gè)數(shù)分別為:1、3、5、5、5,甚至可以各不相同。它產(chǎn)生的二維數(shù)組的形式是:

AAAAAAAAAAAAAAAAAAA這也就意味著在Java中可以隨時(shí)動(dòng)態(tài)地建立數(shù)組。56第三章例3.5.8:使用動(dòng)態(tài)建立二維數(shù)組的方式輸出8行楊輝三角形程序如下:publicclassYangHui1{publicstaticvoidmain(Stringargs[]){inti;

intyh1[][]=newint[8][]; for(i=0;i<8;i++) {yh1[i]=newint[i+1];yh1[i][0]=1;yh1[i][i]=1;}for(i=2;i<8;i++)for(intj=1;j<i;j++)yh1[i][j]=yh1[i-1][j-1]+yh1[i-1][j];for(i=0;i<8;i++){for(intj=0;j<=i;j++)System.out.print(yh1[i][j]+"\t");

System.out.println();}}}57第三章五.數(shù)組的復(fù)制

Java在System類中提供了一個(gè)特殊的方法arraycopy(),用于實(shí)現(xiàn)數(shù)組之間的復(fù)制,我們通過(guò)具體實(shí)例來(lái)說(shuō)明該方法的使用:例3.5.9:數(shù)組的復(fù)制:使用arraycopy()方法。程序如下:publicclassarrCopy{publicstaticvoidmain(Stringargs[]){

inti;

intarr1[]={1,2,3,4,5,6,7,8,9,10}; //聲明數(shù)組并設(shè)置初值

intarr2[]=newint[10];System.arraycopy(arr1,0,arr2,0,arr1.length);

//把a(bǔ)rr1中所有元素復(fù)制到arr2中,下標(biāo)從0開(kāi)始

for(i=0;i<arr2.length;i++) System.out.print(arr2[i]+"");

System.out.println();}}58第三章六.字符串處理

SDK1.4.2是采用UnicodeV3.0來(lái)處理字符的,字符串是內(nèi)存中一個(gè)或多個(gè)連續(xù)排列的字符集合。Java提供的標(biāo)準(zhǔn)包java.long中封裝的String類就是關(guān)于字符串處理的類。這個(gè)類封裝了很多方法,用來(lái)支持字符串的操作。1.字符串聲明及初始化與其它基本數(shù)據(jù)類型相似,Java中的字符串分常量和變量?jī)煞N。當(dāng)程序中出現(xiàn)了字符串常量,系統(tǒng)將自動(dòng)為其創(chuàng)建一個(gè)String對(duì)象,這個(gè)創(chuàng)建過(guò)程是隱含的。對(duì)于字符串變量,在使用之前同樣要進(jìn)行聲明,并進(jìn)行初始化,字符串聲明語(yǔ)法格式如下:

Strings1;字符串一般在聲明時(shí)可以直接進(jìn)行初始化,初始化過(guò)程一般為下面幾種:l

創(chuàng)建空的字符串:

Strings1=newString();

l

由字符數(shù)組創(chuàng)建字符串:

charch[]={‘s’,’t’,’o’,’r’,’y’};Strings2=newString(ch);

l

直接用字符串常量來(lái)初始化字符串:

Strings3=“Hello!WelcometoJava!”;59第三章2.字符串運(yùn)算符“+”

在Java中,運(yùn)算符“+”除了作為算術(shù)運(yùn)算符使用之外,它還經(jīng)常被作為字符串運(yùn)算符用于連接不同的字符串。例3.5.10:“+”的運(yùn)算方式:publicclassStrDemo{publicstaticvoidmain(String[]args){Stringst1="Jack",st2="Brown";Stringname=st1+""+st2;

System.out.println("Name="+name);doublepi=3.1415926;Stringstt="Hello,"+st1;System.out.println(stt+pi+2);System.o

溫馨提示

  • 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)論