版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章運(yùn)算符、表達(dá)式與語句
本章導(dǎo)讀1.算術(shù)運(yùn)算符和算術(shù)表達(dá)式2.關(guān)系運(yùn)算符與關(guān)系表達(dá)式3.邏輯運(yùn)算符與邏輯表達(dá)式4.賦值運(yùn)算符與賦值表達(dá)式5.移位運(yùn)算符6.位運(yùn)算符7.條件運(yùn)算符8.instanceof運(yùn)算符9.一般表達(dá)式10.語句概述11.分支語句12.循環(huán)語句13.跳轉(zhuǎn)語句按照運(yùn)算符所操作數(shù)據(jù)的個數(shù),可以將其分為一元運(yùn)算符、二元運(yùn)算符和三元運(yùn)算符。按照操作數(shù)據(jù)的類型,可以將運(yùn)算符分為算術(shù)運(yùn)算符、賦值運(yùn)算符、自增/自減運(yùn)算符、條件運(yùn)算符、位運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符等等。3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式(1)加減運(yùn)算符加減運(yùn)算的結(jié)合性是從左到右。加減運(yùn)算的操作元是整型或浮點(diǎn)型數(shù)據(jù),加減運(yùn)算符的優(yōu)先級是4級。(2)乘、除和求余運(yùn)算符乘、除和求余運(yùn)算的運(yùn)算符號為*、/、%,都是雙目運(yùn)算符。*、/、%運(yùn)算符的結(jié)合性是從左到右,例如:2*3/8,先計(jì)算2*3,然后再將得到的結(jié)果除以8。乘、除和求余運(yùn)算的操作元是整型或浮點(diǎn)型數(shù)據(jù)。*、/、%運(yùn)算符的優(yōu)先級是3級。
(3)自增、自減運(yùn)算符自增、自減運(yùn)算的運(yùn)算符號為:++、--,都是單目運(yùn)算符,運(yùn)算符的優(yōu)先級是2級。運(yùn)算符可以放在操作元之前,也可以放在操作元之后,但操作元必須是一個整型或浮點(diǎn)型變量(不能是常量或表達(dá)式)。運(yùn)算符的作用是使變量的值增1或減1,如:
++x,--x表示在使用x之前,先使x的值加(減)1。
x++,x--表示在使用x之后,使x的值加(減)1。粗略地看,++x和x++的作用相當(dāng)于x=x+1。但++x和x++的不同之處在于,++x是先執(zhí)行x=x+1再使用x的值,而x++是先使用x的值再執(zhí)行x=x+1。如果x的原值是5,則:對于y=++x;y的值為6。對于y=x++;y的值為5,然后x的值變?yōu)?。(4)算術(shù)表達(dá)式用算術(shù)符號和操作元連接起來的符合Java語法規(guī)則的式子,稱為算術(shù)表達(dá)式。如
x+2*y-30+3*(y+5)-12+n+(--n)。(5)算術(shù)混合運(yùn)算的精度精度從“低”到“高”排列的順序是:
byteshortintlongfloatdoubleJava將按運(yùn)算符兩邊的操作元的最高精度保留結(jié)果的精度,例如:5/2的結(jié)果是2,要想得到2.5,必須寫成5.0/2或5.0f/2。算數(shù)運(yùn)算符運(yùn)算符用法含義結(jié)合性二元運(yùn)算符+op1+op2加法左-op1-op2減法左*op1*op2乘法左/op1/op2除法左%op1%op2模運(yùn)算(求余)左一元運(yùn)算符++op1正數(shù)右--op1負(fù)數(shù)右++++op1,op1++自增右,左----op1,op1++自減右,左對于二元運(yùn)算符,運(yùn)算結(jié)果的數(shù)據(jù)類型一般為兩個操作數(shù)中表達(dá)范圍較大的類型。例如,一個整數(shù)和浮點(diǎn)數(shù)運(yùn)算的結(jié)果為浮點(diǎn)數(shù)。對于一元運(yùn)算符,運(yùn)算結(jié)果的類型與操作數(shù)的類型相同。自增、自減運(yùn)算符有前綴和后綴兩種形式,當(dāng)是前綴形式(即++、--符號出現(xiàn)在變量的左側(cè))時,對變量實(shí)施的運(yùn)算是“先運(yùn)算后使用”;當(dāng)是后綴形式(即++、--符號出現(xiàn)在變量的右側(cè))時,對變量實(shí)施的運(yùn)算是“先使用后運(yùn)算”。算數(shù)運(yùn)算符的特點(diǎn)char型數(shù)據(jù)和整型數(shù)據(jù)運(yùn)算結(jié)果的精度是int。例如:bytek=18;那么‘H’+k;的結(jié)果是int型,因此下列寫法是不正確的,charch=’H’+k;應(yīng)當(dāng)寫成:charch=(char)(’H’+k);返回在Java中,"%"(求模運(yùn)算符)的操作數(shù)可為浮點(diǎn)數(shù),如52.3%10=2.3;Java對"+"運(yùn)算進(jìn)行了擴(kuò)展,可作字符串連接運(yùn)算符,如"ab"+"efd"得"abefd";做"+"運(yùn)算時,如果一個操作數(shù)是字符串,其它操作數(shù)自動轉(zhuǎn)換成字符串.如:
Strings;s="s:"+4*5;
//結(jié)果是s="s:20";byte,short,char等類型進(jìn)行混合運(yùn)算時,會先自動轉(zhuǎn)換為int類型再運(yùn)算。算數(shù)運(yùn)算符的注意事項(xiàng)publicclassTest{publicstaticvoidmain(String[]args){inti=29;intj=3;floata=23.5f;doubleb=4.0; System.out.println("i+a="+(i+a));System.out.println("i*j="+(i*j));System.out.println("i/j="+(i/j));//對于整數(shù),運(yùn)算結(jié)果為整數(shù)
System.out.println("i%j="+(i%j));//求余數(shù)
System.out.println("a*b="+(a*b));System.out.println("a/b="+(a/b));//對于浮點(diǎn)數(shù),運(yùn)算結(jié)果為浮點(diǎn)數(shù)
System.out.println("a%b="+(a%b));//浮點(diǎn)數(shù)求余,結(jié)果為浮點(diǎn)數(shù)
System.out.println("i++="+(i++));//先使用,后自增
System.out.println(“++i=”+(++i));//先自增,后使用}}程序舉例分析:在打印輸出語句中,+除了可以進(jìn)行加法運(yùn)算外,還可以進(jìn)行字符串的連接,吧字符串和數(shù)值類型在一起進(jìn)行運(yùn)算,最后轉(zhuǎn)換為字符串輸出。條件運(yùn)算符的格式如下:(boolean_expr)?true_statement:false_statement;其含義為:若boolean_expr為真,則執(zhí)行true_satatement;如果為假,則執(zhí)行語句false_statement,要求這兩條語句返回同樣(相容)的數(shù)據(jù)類型。例如:result==sum?100:2*num;條件運(yùn)算符除~為右結(jié)合外,其余為左結(jié)合。操作數(shù)的類型一般為整型或字符型。&,|,^三個運(yùn)算符可以用于boolean。">>"右移是用符號位來填充右移后留下的空位,">>>"是用零來填充空位.若兩個數(shù)據(jù)的長度不同,如a&b,a為byte型,b為int型,系統(tǒng)首先會將a的左側(cè)24位填滿,若a為正,則填滿0,若a為負(fù),填滿1即進(jìn)行“符號擴(kuò)充”。注意事項(xiàng)3.2關(guān)系運(yùn)算符與關(guān)系表達(dá)式
關(guān)系運(yùn)算符用來比較兩個值的關(guān)系,關(guān)系運(yùn)算符的運(yùn)算結(jié)果是boolean型數(shù)據(jù),當(dāng)運(yùn)算符對應(yīng)的關(guān)系成立時,運(yùn)算結(jié)果是true,否則是false。(1)大小關(guān)系運(yùn)算符大小關(guān)系運(yùn)算的符號分別是:>、>=、<、<=,都是雙目運(yùn)算符,操作元是數(shù)值型的常量、變量或表達(dá)式。例如,10<9的結(jié)果是false,5>1的結(jié)果是true。在書寫時要特別注意的是“<=”是一個完整的符號,在“<”和“=”之間不要含有空格。大小關(guān)系運(yùn)算符的級別是6級,例如,10>20-17的結(jié)果為true,因?yàn)樗阈g(shù)運(yùn)算符的級別高于關(guān)系運(yùn)算符,10>20-17相當(dāng)于10>(20-17)。
(2)等與不等關(guān)系等與不等關(guān)系運(yùn)算的符號分別是:“==”、“!=”,都是雙目運(yùn)算符。運(yùn)算符的級別是7級?!?=”和“!=”都是由2個字符組成的一個完整的符號,書寫時不要含有空格。注意不要將后面講述的賦值運(yùn)算符“=”與等號運(yùn)算符“==”混淆。(3)關(guān)系表達(dá)式結(jié)果為數(shù)值型的變量或表達(dá)式可以通過關(guān)系運(yùn)算符形成關(guān)系表達(dá)式。例如,24>18,(x+y+z)>30+x等。返回關(guān)系運(yùn)算符關(guān)系運(yùn)算符用來比較兩個值之間的大小,結(jié)果為布爾值,true或者false,而不是1和0運(yùn)算符示例含義==Op1==Op2比較兩個數(shù)是否相等!=Op1!=Op2比較兩個數(shù)據(jù)是否不等<Op1<Op2比較一個是否小于另一個>Op1>Op2比較一個是否大于另一個<=Op1<=Op2比較一個是否小于等于另一個>=Op1>=Op2比較一個是否大于等于另一個3.3邏輯運(yùn)算符與邏輯表達(dá)式邏輯運(yùn)算只能處理布爾類型的數(shù)據(jù),所得結(jié)果也是布爾值邏輯運(yùn)算符支持短路運(yùn)算
運(yùn)算符示例含義結(jié)合性&&Op1&&Op2邏輯與運(yùn)算左||Op1||Op2邏輯或運(yùn)算左!!Op邏輯非運(yùn)算右3.3邏輯運(yùn)算符與邏輯表達(dá)式
邏輯運(yùn)算用來實(shí)現(xiàn)boolean型數(shù)據(jù)的邏輯“與”、“或”和“非”運(yùn)算,運(yùn)算結(jié)果是boolean型數(shù)據(jù)。(1)邏輯“與”和邏輯“或”邏輯“與”和邏輯“或”運(yùn)算的符號是:&&、||,是雙目運(yùn)算符,操作元是boolean型的變量或求值結(jié)果是boolean型數(shù)據(jù)的表達(dá)式?!?&”的運(yùn)算法則是:當(dāng)2個操作元的值都是true時,運(yùn)算結(jié)果是true,否則是false?!皘|”的運(yùn)算法則是:當(dāng)2個操作元的值都是flase時,運(yùn)算結(jié)果是false,否則是true?!?&”和“||”的級別分別是11和12級,結(jié)合性是左到右。例如,1>8&&9>2的結(jié)果為false,1>8||6>2的結(jié)果為true。由于關(guān)系運(yùn)算符的級別高于&&和||的級別,所以,1>8&&9>2相當(dāng)于(1>8)&&(9>2)。
(2)邏輯“非”邏輯“非”運(yùn)算的符號是:!,是單目運(yùn)算符,操作元在左面。當(dāng)操作元的值是TURE時,運(yùn)算結(jié)果是FALSE;反之為TURE。“!”的運(yùn)算級別是2級,結(jié)合性從右到左。例如,??!X相當(dāng)于!(!X)。(3)邏輯表達(dá)式結(jié)果為boolean型的變量或表達(dá)式可以通過邏輯運(yùn)算符形成邏輯表達(dá)式。例如,24>18&&4<0,x!=0||y!=0。返回邏輯運(yùn)算符的短路運(yùn)算短路計(jì)算,就是從左向右依次計(jì)算每個條件是否成立,如果在前面的計(jì)算中,已經(jīng)可以得出整個復(fù)合條件表達(dá)式的計(jì)算結(jié)果,則后面不再計(jì)算。例如:inti=5,對于表達(dá)式(i>8)&&(i<4)的計(jì)算為短路計(jì)算位運(yùn)算符&,|,^可以用于邏輯運(yùn)算,但是它們不支持短路計(jì)算。3.4賦值運(yùn)算符與賦值表達(dá)式
賦值運(yùn)算符:=。賦值運(yùn)算符是雙目運(yùn)算符,左面的操作元必須是變量,不能是常量或表達(dá)式。設(shè)x是一個整型變量,y是一個boolean型變量,x=120和y=false都是正確的賦值表達(dá)式,賦值運(yùn)算符的優(yōu)先級較低,是14級,結(jié)合方向右到左。賦值表達(dá)式的值就是“=”左面變量的值。注意不要將賦值運(yùn)算符“=”與等號運(yùn)算符“==”混淆。
返回賦值運(yùn)算符賦值運(yùn)算符包括兩種:基本賦值運(yùn)算符擴(kuò)展賦值運(yùn)算符基本賦值運(yùn)算<變量名>=<表達(dá)式>其中,“=”是賦值運(yùn)算符例如:intI,j;i=10;j=i+20擴(kuò)展賦值運(yùn)算符運(yùn)算符示例含義+=count+=2count=count+2-=count-=2
count=count-2*=count*=2
count=count*2/=count/=2
count=count/2%=count%=2count=count%2賦值相容如果參加運(yùn)算的變量類型和表達(dá)式類型相同,則可以賦值,稱之為類型相同;如果兩者類型不同,并且變量類型比表達(dá)式類型長時,系統(tǒng)會自動將表達(dá)式轉(zhuǎn)化為較長的類型,如int轉(zhuǎn)換為long,這時也可以賦值,稱之為賦值相容如果類型變量比表達(dá)式類型短,則賦值不相容,編譯時會產(chǎn)生錯誤。這時,需要使用類型強(qiáng)制轉(zhuǎn)換才能進(jìn)行賦值。例如:intsmallval=99L;floatz1=12.414;intsmallval=(int)99L;floatz1=(float)12.414;位運(yùn)算(含移位運(yùn)算和位運(yùn)算)不是對整個數(shù)進(jìn)行運(yùn)算,而是對該數(shù)表示的二進(jìn)制位上的0和1進(jìn)行運(yùn)算Java用補(bǔ)碼表示二進(jìn)制數(shù)1表示為二進(jìn)制為
00000000000000000000000000000001(4個字節(jié))-1表示為二進(jìn)制為11111111111111111111111111111111(4個字節(jié))3.5移位運(yùn)算符
位運(yùn)算符運(yùn)算符示例含義
&Op1
&
Op2使Op1和Op2按位相與
|Op1
|
Op2使Op1和Op2按位相或
~~Op對Op按位取反
^Op1^Op2使Op1和Op2按位異或
<<Op1<<
Op2使Op1左移Op2位,右補(bǔ)0
>>Op1>>
Op2使Op1右移Op2位(帶符號,左邊補(bǔ)充符號位)
>>>Op1>>>Op2使Op1無符號右移Op2位(左邊始終補(bǔ)添0)3.5移位運(yùn)算符
位運(yùn)算符用來對二進(jìn)制位進(jìn)行操作,分為左移位操作和右移位操作。(1)左移位運(yùn)算符左移位運(yùn)算的符號為:<<,是雙目運(yùn)算符。左移位運(yùn)算符左面的操作元稱作被移位數(shù),右面的操作數(shù)稱作移位量,操作元必須是整型類型的數(shù)據(jù)。假設(shè)a是一個被移位的整型數(shù)據(jù),n是位移量。
a<<n運(yùn)算的結(jié)果是通過將a的所有位都左移n位,每左移一個位,左邊的高階位上的0或1被移出丟棄,并用0填充右邊的低位。
對于byte或short型數(shù)據(jù),a<<n的運(yùn)算結(jié)果是int型精度。當(dāng)進(jìn)行
a<<2
運(yùn)算時,計(jì)算系統(tǒng)首先將a升級為int型數(shù)據(jù),對于正數(shù)將高位用0填充;負(fù)數(shù)用1填充,然后在進(jìn)行移位運(yùn)算。例如,對于
bytea=-8;11111000
在進(jìn)行a<<1運(yùn)算時,首先將11111000生級為int型,將高位用1填充:
11111111111111111111111111111000
然后在進(jìn)行移位運(yùn)算得到-16:
11111111111111111111111111110000
因此,如果把a(bǔ)<<1的結(jié)果賦值給一個byte型變量就必須進(jìn)行強(qiáng)制轉(zhuǎn)換運(yùn)算:
byteb=(byte)(a<<1);
在進(jìn)行a<<n運(yùn)算時,如果a是byte、short或int型數(shù)據(jù),系統(tǒng)總是先計(jì)算出n%32的結(jié)果m,然后進(jìn)行a<<m運(yùn)算。例如,a<<33的計(jì)算結(jié)果與a<<1相同。對于long型數(shù)據(jù),系統(tǒng)總是先計(jì)算出n%64的結(jié)果m,然后進(jìn)行a<<m運(yùn)算。(2)右移位運(yùn)算符右移位運(yùn)算的符號為:>>,是雙目運(yùn)算符。假設(shè)a是一個被移位的整型數(shù)據(jù),n是位移量。
a>>n運(yùn)算的結(jié)果是通過將a的所有位都右移n位,每右移一個位,右邊的低階位被移出丟棄,并用0或1填充左邊的高位,a是正數(shù)用0填充,負(fù)數(shù)時用1填充。因此,a每右移一次,如果該數(shù)的每一計(jì)算有效位都沒有從低位移出時,就相當(dāng)于將a除以2并舍棄了余數(shù)。整數(shù)不斷右移位的最后結(jié)果一定是0,而負(fù)數(shù)不斷右移位的最后結(jié)果是-1。對于byte或short型數(shù)據(jù),a>>n的運(yùn)算結(jié)果是int型精度。
在進(jìn)行a>>n運(yùn)算時,如果a是byte、short或int型數(shù)據(jù),系統(tǒng)總是先計(jì)算出n%32的結(jié)果m,然后進(jìn)行a>>m運(yùn)算,例如,a>>33的計(jì)算結(jié)果與a>>1相同。對于long型數(shù)據(jù),系統(tǒng)總是先計(jì)算出n%64的結(jié)果m,然后進(jìn)行a>>m運(yùn)算。在下面的例子1中,用戶輸入移位運(yùn)算的兩個操作元,程序給出右移和左移后的結(jié)果。返回舉例:運(yùn)算符<<<<十進(jìn)制數(shù)二進(jìn)制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2200000000000000000000000000000010運(yùn)算結(jié)果2000000000000000000000000000010100在沒有溢出的情況下,左移一位相當(dāng)于乘以2舉例:運(yùn)算符>>>>十進(jìn)制數(shù)二進(jìn)制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2200000000000000000000000000000010運(yùn)算結(jié)果100000000000000000000000000000001右移一位相當(dāng)于除以23.6位運(yùn)算符
(1)“按位與”運(yùn)算符“&”是雙目運(yùn)算符,對兩個整型數(shù)據(jù)a、b按位進(jìn)行運(yùn)算,運(yùn)算結(jié)果是一個整型數(shù)據(jù)c。運(yùn)算法則是:如果a、b兩個數(shù)據(jù)對應(yīng)位都是1,則c的該位是1,否則是0。如果b的精度高于a,那么結(jié)果c的精度和b相同。(2)“按位或”運(yùn)算符“|”是雙目運(yùn)算符。對兩個整型數(shù)據(jù)a、b按位進(jìn)行運(yùn)算,運(yùn)算結(jié)果是一個整型數(shù)據(jù)c。運(yùn)算法則是:如果a、b兩個數(shù)據(jù)對應(yīng)位都是0,則c的該位是0,否則是1。如果b的精度高于a,那么結(jié)果c的精度和b相同。(3)“按位非”運(yùn)算符“~”是單目運(yùn)算符。對一個整型數(shù)據(jù)a按位進(jìn)行運(yùn)算,運(yùn)算結(jié)果是一個整型數(shù)據(jù)c。運(yùn)算法則是:如果a對應(yīng)位是0,則c的該位是1,否則是0。(4)“按位異或”運(yùn)算符“^”是雙目運(yùn)算符。對兩個整型數(shù)據(jù)a、b按位進(jìn)行運(yùn)算,運(yùn)算結(jié)果是一個整型數(shù)據(jù)c。運(yùn)算法則是:如果a、b兩個數(shù)據(jù)對應(yīng)位相同,則c的該位是0,否則是1。如果b的精度高于a,那么結(jié)果c的精度和b相同。位運(yùn)算符在操作邏輯型數(shù)據(jù)時,與邏輯運(yùn)算符&&、||、!不同的是:位運(yùn)算要計(jì)算完a和b之后再給出運(yùn)算的結(jié)果。在下面的例子2中,利用“異或”運(yùn)算的性質(zhì),對幾個字符進(jìn)行加密并輸出密文,然后再解密。運(yùn)行結(jié)果見圖3-2。
圖3-2返回舉例:運(yùn)算符&&十進(jìn)制數(shù)二進(jìn)制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2900000000000000000000000000001001運(yùn)算結(jié)果100000000000000000000000000000001用于將某些特定的位清0舉例:運(yùn)算符||十進(jìn)制數(shù)二進(jìn)制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2900000000000000000000000000001001運(yùn)算結(jié)果1300000000000000000000000000001101用于將某些特定的位置1舉例:運(yùn)算符^^十進(jìn)制數(shù)二進(jìn)制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2900000000000000000000000000001001運(yùn)算結(jié)果1200000000000000000000000000001100舉例:運(yùn)算符~~十進(jìn)制數(shù)二進(jìn)制數(shù)操作數(shù)1500000000000000000000000000000101運(yùn)算結(jié)果-6111111111111111111111111111100103.7條件運(yùn)算符
條件運(yùn)算符是一個3目運(yùn)算符,它的符號是:“?:”,需要連接3個操作元,用法如下:
op1?op2:op3
要求第一個操作元op1的值必須是boolean型數(shù)據(jù)。運(yùn)算法則是:當(dāng)op1的值是true時,op1?op2:op3運(yùn)算的結(jié)果是op2的值;當(dāng)op1的值是false時,op1?op2:op3運(yùn)算的結(jié)果是op3的值。例如,12>8?100:200的結(jié)果是100;12<8?100:200的結(jié)果是200。返回3.8instanceof運(yùn)算符
該運(yùn)算符是雙目運(yùn)算符,左面的操作元是一個對象,右面是一個類。當(dāng)左面的對象是右面的類創(chuàng)建的對象時,該運(yùn)算的結(jié)果是true,否則是false。該運(yùn)算符將在第4章以后使用。返回3.9一般表達(dá)式
Java的一般表達(dá)式就是用運(yùn)算符及操作元連接起來的符合Java規(guī)則的式子,簡稱表達(dá)式。一個Java表達(dá)式必須能求值,即按著運(yùn)算符的計(jì)算法則,可以計(jì)算出表達(dá)式的值。例如,假如intx=1,y=-2,n=10;那么,表達(dá)式
x+y+(--n)*(x>y&&x>0?(x+1):y)
的值是int型數(shù)據(jù),結(jié)果為17。返回3.10語句概述
Java里的語句可分為以下5類:(1)方法調(diào)用語句在第4章將介紹類、對象等概念,對象可以調(diào)用類中的方法產(chǎn)生行為,如:例子1中的
reader.nextInt();
(2)表達(dá)式語句一個表達(dá)式的最后加上一個分號就構(gòu)成了一個語句,稱作表達(dá)式語句。分號是語句不可缺少的部分。例如,賦值語句:
x=23;
(3)復(fù)合語句可以用“{”和“}”把一些語句括起來構(gòu)成復(fù)合語句,一個復(fù)合語句也稱作一個代碼塊。例如,
{z=23+x;System.out.println("hello");}
(4)控制語句控制語句包括:條件分支語句、循環(huán)語句和跳轉(zhuǎn)語句。(5)package語句和import語句
package語句和import語句與類、對象有關(guān),將在第4章講解。返回塊(復(fù)合語句)是用一對花括號括起來的任意數(shù)量的簡單Java語句。塊容許在任何Java程序設(shè)計(jì)的結(jié)構(gòu)中擁有多條簡單語句,否則結(jié)構(gòu)本身可能只含有一條簡單語句。注:(1)塊容許嵌套;(2)不能在嵌套的塊類聲明相同名字的變量。復(fù)合語句Java中提供了兩條基本的分支選擇語句:if語句和switch語句,可以形成三種形式的選擇結(jié)構(gòu):(1)雙分支選擇結(jié)構(gòu):if/else(2)單分支選擇結(jié)構(gòu):if(3)多分支選擇結(jié)構(gòu):switch3.11分支語句3.11分支語句1.條件分支語句(1)if-else語句.if-else語句是Java中的一條語句,由一個“if”、“else”和兩個復(fù)合語句按一定格式構(gòu)成,if-else語句的格式如下:
if(表達(dá)式){若干語句}else{若干語句
}
一條if-else語句的作用是根據(jù)不同的條件產(chǎn)生不同的操作,執(zhí)行法則如下:
if后面()內(nèi)的表達(dá)式的值必須是boolean型的。如果表達(dá)式的值為true,則執(zhí)行緊跟著的復(fù)合語句;如果表達(dá)式的值為false,則執(zhí)行else后面的復(fù)合語句。1、if語句的基本形式if(布爾表達(dá)式) {語句塊1}else {語句塊2}2、省略了else子句的if語句if(布爾表達(dá)式) {語句塊1}if語句if或else控制的對象可以是單個語句(statement),也可以是程序塊(block)。條件condition可以是任何返回布爾值的表達(dá)式。else子句是可選的。
(2)多條件if-elseif-else語句程序有時需要根據(jù)多條件來選擇某一操作,這時就可以使用if-elseif-else語句。if-elseif-else語句是Java中的一條語句,由一個“if”、若干個“elseif”、一個“else”與若干個復(fù)合語句按一定規(guī)則構(gòu)成。語句的格式如下:
if(布爾表達(dá)式1) {語句塊1} elseif(布爾表達(dá)式2){語句塊2} elseif(布爾表達(dá)式3){語句塊3}
…. else{語句塊n}publicclassc3_1{ publicstaticvoidmain(Stringargs[]) { 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(“成績:不及格”); }}示例程序c3_1.java(1)Java編譯器是將else與最近的if組合在一起,除非用花括號{}指定不同的匹配方式。(2)當(dāng)語句塊包含多條簡單語句時,必須用花括號{}將這些語句括起來,否則會出錯。使用if嵌套時的注意事項(xiàng)
有時為了編程的需要,復(fù)合語句中可以沒有任何語句。一條if-elseif-else語句的作用是根據(jù)不同的條件產(chǎn)生不同的操作,執(zhí)行法則如下:
if以及elseif后面()內(nèi)的表達(dá)式的值必須是boolean型的。該語句執(zhí)行時,首先計(jì)算if后括號中的表達(dá)式的值,如果該表達(dá)式的值為true,則執(zhí)行緊跟著的復(fù)合語句,然后就結(jié)束整個語句的執(zhí)行;如果if后括號中的表達(dá)式的值為false,就依次再計(jì)算后面的elseif的表達(dá)式的值,直到出現(xiàn)某個表達(dá)式的值為true為止,然后執(zhí)行該elseif后面的復(fù)合語句,結(jié)束整個語句的執(zhí)行。如果所有的表達(dá)式的值都是false,就執(zhí)行else后面復(fù)合語句,結(jié)束整個語句的執(zhí)行。在下面的例子3中,用戶在鍵盤輸入3個數(shù),程序判斷這3個數(shù)能構(gòu)成什么形狀的三角形。2.switch開關(guān)語句switch語句是多分支的開關(guān)語句,它的一般格式定義如下:switch(表達(dá)式){case常量值1:若干個語句
break;
case常量值2:若干個語句
break;
………case常量值n:若干個語句
break;
default:若干語句
}publicclassc3_2{ publicstaticvoidmain(Stringargs[]) { intgrade=76; switch(grade/10) {case10: case9:System.out.println(“成績:優(yōu)”);break; case8:System.out.println(“成績:良”);break; case7:System.out.println(“成績:中”);break; case6:System.out.println(“成績:及格”);break; default:System.out.println(“成績:不及格”); } }}示例程序c3_3.java(1)switch語句后面的表達(dá)式類型可以是byte,char,short,int,不容許float,double,long;(2)case后面的值應(yīng)各不相同,且類型應(yīng)與表達(dá)式類型一致;(3)default可省略不要;(4)若去掉break語句,在執(zhí)行完成第一個匹配case語句后面的語句塊之后,會繼續(xù)執(zhí)行其余case語句后面的語句塊,而不管表達(dá)式的值是否與case語句的值匹配。(5)如果沒有一個case常量與表達(dá)式的值相匹配,則執(zhí)行default語句。(6)case語句只是起到一個標(biāo)號作用,用來查找匹配的入口并從此處開始執(zhí)行其后的語句序列,注意:
switch語句中表達(dá)式的值必須是整型或字符型;常量值1到常量值n必須也是整型或字符型。switch語句首先計(jì)算表達(dá)式的值,如果表達(dá)式的值和某個case后面的常量值相同,就執(zhí)行該case里的若干個語句,直到碰到break語句為止。若沒有任何常量值與表達(dá)式的值相同,則執(zhí)行default后面的若干個語句。其中default是可有可無的,如果它不存在,并且所有的常量值都和表達(dá)式的值不相同,那么switch語句就不會進(jìn)行任何處理。需要注意的是,在同一個switch語句中,case后的常量值必須互不相同。下面的例子4使用了switch語句,用戶在鍵盤輸入一個代表月份的整數(shù),程序輸出是該月是在年度的第幾季度。返回循環(huán)分類:(1)不確定循環(huán)(2)確定循環(huán)Java提供了三種循環(huán)語句:(1)while(2)do-while(3)for3.12循環(huán)語句3.12循環(huán)語句1.while循環(huán)
while語句的一般格式:
while(表達(dá)式){若干語句
}while語句由關(guān)鍵字while、括號中的一個求值為boolean型數(shù)據(jù)的表達(dá)式和一個復(fù)合語句組成,其中的復(fù)合語句稱作循環(huán)體,循環(huán)體只有一條語句時,大括號“{}”可以省略,但最好不要省略,以便增加程序的可讀性。表達(dá)式稱作循環(huán)條件。while語句的執(zhí)行規(guī)則是:(1)計(jì)算表達(dá)式的值,如果該值是true時,就進(jìn)行(2),否則進(jìn)行(3)。(2)執(zhí)行循環(huán)體,再進(jìn)行(1)(3)結(jié)束while語句的執(zhí)行
while語句執(zhí)行規(guī)則如流程圖3.5所示。while語句執(zhí)行規(guī)則如流程圖3.5所示。表達(dá)式
循環(huán)體truefalse圖3.5while循環(huán)語句//計(jì)算10!publicclassc3_3{ publicstaticvoidmain(Stringargs[]) { intnum=10,result; result=1; while (num!=0) {result*=num; --num; } System.out.print(“\tresult=”+result); }}示例程序c3_3.java
2.do-while循環(huán)一般格式:
do{若干語句
}while(表達(dá)式);do-while循環(huán)和while循環(huán)的區(qū)別是:do-while的循環(huán)體至少被執(zhí)行一次,如圖3.6所示。下面的例子5分別用while和do-while循環(huán)計(jì)算常數(shù)e的近似值:e=1+1/1+1/2!+1/3!+……。
循環(huán)體表達(dá)式truefalse圖3.6do-while循環(huán)語句
3.for循環(huán)
for語句的一般格式:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3){若干語句
}for語句由關(guān)鍵字for、括號中用分號分割的3個表達(dá)式,以及一個復(fù)合語句組成,其中的“表達(dá)式2”必須是一個求值為boolean型數(shù)據(jù)的表達(dá)式,而復(fù)合語句稱作循環(huán)體。
for語句的執(zhí)行規(guī)則是:(1)計(jì)算“表達(dá)式1”,完成必要的初始化工作(2)判斷“表達(dá)式2”的值,若“表達(dá)式2”的值為true,則進(jìn)行(3),否則進(jìn)行(4)。(3)執(zhí)行循環(huán)體,然后計(jì)算“表達(dá)式3”,以便改變循環(huán)條件,進(jìn)行(2)。圖3.9使用for語句(4)結(jié)束for語句的執(zhí)行.
一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。例如,6=1+2+3。下面的例子6使用for循環(huán)計(jì)算出1000內(nèi)的全部完數(shù)
返回(1)在for語句中,括號內(nèi)的三個表達(dá)式均可省略。當(dāng)省略了任何一個表達(dá)式時,必須在循環(huán)語句塊中的其他位置,否則容易造成死循環(huán)。(2)在for語句的“初值表達(dá)式”和“循環(huán)過程表達(dá)式”中可以使用逗號“,”。(3)在循環(huán)中小心使用對浮點(diǎn)數(shù)是否相等的測試。例如:
for(doublex=0;x!=10;x+=0.1)………….
是死循環(huán)
注意:(4)在for語句的第一個初值表達(dá)式中聲明了一個變量,該變量的作用域從這里開始一直到for循環(huán)體結(jié)束。且在循環(huán)內(nèi)部定義的變量,在循環(huán)外部不能使用。例如:
for(intI=1;I<=10;I++)intI;{ for(intI=1;I<=10;I++)
……………….{}…………..//變量I在此處無定義}//在此處變量I有定義注意:(5)在不同的for循環(huán)體語句塊中,可以定義相同名稱的變量。例如:
for(intI=1;I<=10;I++) {
………… }
………. for(intI=11;I<=20;I++) {
………… }注意:(6)for循環(huán)等價于while循環(huán)。即:
for(statement1;expression1;expression2)statement2;statement1;while(expression1){statement2; expression2;}注意://計(jì)算中獎幾率importjavax.swing.*;publicclassc3_4{ publicstaticvoidmain(String[]args) { Stringinput=JOptionPane.showInputDialog("你希望抽取多少個數(shù)?"); intk=Integer.parseInt(input); input=JOptionPane.showInputDialog("一共有多少個數(shù)?"); intn=Integer.parseInt(input); intresult=1; for(inti=1;i<=k;i++)result=result*(n-i+1)/i; System.out.println("你中獎的幾率是1/"+result); System.exit(0); }}示例程序c3_4.java
循環(huán)控制主要有兩種方法:利用計(jì)數(shù)器控制循環(huán),利用標(biāo)記控制循環(huán)。大多數(shù)循環(huán)利用計(jì)數(shù)器的原理來控制。設(shè)計(jì)計(jì)數(shù)器控制的循環(huán)程序,注意以下幾點(diǎn):(1)循環(huán)控制變量的名字;(2)循環(huán)控制變量的初值;(3)每一次執(zhí)行循環(huán)時,循環(huán)控制變量的增量(或減量)(4)測試循環(huán)控制變量的終值條件。標(biāo)記控制循環(huán)主要適用于無法事先知道循環(huán)次數(shù)的情況。循環(huán)控制要點(diǎn)importjava.io.*;publicclassc3_5{ publicstaticvoidmain(String[]args)throwsIOException { BufferedReaderkeyin=newBufferedReader(newInputStreamReader(System.in)); intLtotal=0,Wtotal=0,Ztotal=0; charname; Stringc1; System.out.print("enterletterLorWorZname,#toend:"); c1=keyin.readLine(); name=c1.charAt(0); while(name!='#') { switch(name) { case'L': case'l':Ltotal++;break;程序示例C3_5.java(標(biāo)記控制循環(huán)) case'W': case'w':Wtotal++;break; case'Z': case'z':Ztotal++;break; } System.out.print("enterletterLorWorZname,#toend:"); c1=keyin.readLine(); name=c1.charAt(0); } System.out.println("Ltotal="+Ltotal); System.out.println("Wtotal="+Wtotal); System.out.println("Ztotal="+Ztotal); }}程序示例C2_15.java(接上)
循環(huán)嵌套是在循環(huán)體內(nèi)包含循環(huán)程序的情形。Java提供的三種循環(huán)可以自身嵌套,也可以相互嵌套。但在嵌套的過程中不能出現(xiàn)交叉。循環(huán)嵌套//計(jì)算1!+2!+3!+......+10!publicclassc2_16{ publicstaticvoidmain(String[]args) { intresult=0,tmpresult=1; for(inti=1;i<=10;i++) { for(intj=1;j<=i;j++)tmpresult=tmpresult*j; result+=tmpresult; tmpresult=1; } System.out.println("\tresult="+result); }}程序示例c2_16.java在for循環(huán)內(nèi)聲明變量在for循環(huán)中使用逗號
for的其它用法for(inta=1,b=4;a<b;a++,b--){System.out.println("a="+a);System.out.println("b="+b);}for-eachpublicclassForEachDemo{ publicstaticvoidmain(String[]args){ intsum=0; inta[]=newint[100]; for(inti=0;i<100;i++) a[i]=101+i; //for-each語句的使用
for(inte:a)sum=sum+e; System.out.println("thesumis"+sum); }}可以用for語句遍歷一個數(shù)組或集合中的所有元素。
該程序中,“:”表示“in”的意思,for(inte:a)就是“foreachinteina”,即“對于數(shù)組a中的每個整數(shù)e”。通過定義一個整數(shù)變量e表示數(shù)組中的每個元素。for-each循環(huán)看上去比一般的for循環(huán)漂亮的多,不需要使用下標(biāo)。Foreachbreak語句continue語句return語句3.13跳轉(zhuǎn)語句Break語句可以獨(dú)立使用,而continue語句只能在循環(huán)結(jié)構(gòu)的循環(huán)體中。一、break語句
break語句通常有不帶標(biāo)號和帶標(biāo)號兩種:
break;breakLab;
其中:break是關(guān)鍵字,Lab是用戶定義的標(biāo)號。一、break語句在Java中,break語句有3種作用。第一,在switch語句中,它被用來終止一個語句序列或者語句塊。第二,它能被用來退出一個循環(huán)。第三,它能作為一種“先進(jìn)”的goto語句來使用。Break語句的應(yīng)用使用break退出循環(huán)break語句1/2for(inti=0;i<3;i++){System.out.print("Pass"+i+":");for(intj=0;j<100;j++){if(j==10)
break;System.out.print(j+"");}System.out.println();}把break當(dāng)作goto的一種形式來用
booleant=true;first:{second:{
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 青島理工大學(xué)《動物行為學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 個人學(xué)習(xí)計(jì)劃制定與執(zhí)行方法研究
- 房地產(chǎn)市場課程設(shè)計(jì)
- dtmf課程設(shè)計(jì) 燕山大學(xué)
- 嵌體粘接的護(hù)理配合
- 現(xiàn)代藝術(shù)社區(qū)的設(shè)計(jì)思考
- 醫(yī)院病房裝修與醫(yī)療環(huán)境設(shè)計(jì)
- 家庭理財(cái)基礎(chǔ)知識講座
- 托育蠟筆涂鴉課程設(shè)計(jì)
- 人力資源管理新技術(shù)與工具應(yīng)用研究進(jìn)展分析
- 餐廳店長工作職責(zé)流程及職責(zé)
- 最新-白內(nèi)障科普講座課件
- 《男女導(dǎo)尿術(shù)》課件共
- 高中部年級組長崗位職責(zé)
- 微整面部美學(xué)設(shè)計(jì)面部風(fēng)水設(shè)計(jì)課件
- 2023版初中化學(xué)跨學(xué)科實(shí)踐活動(化學(xué))
- 宿舍衛(wèi)生安全情況檢查表
- 建設(shè)集團(tuán)公文格式平行文模板
- 在逃人員登記樣表
- 稻田養(yǎng)蟹技術(shù)課件
- 呼吸機(jī)波形分析-概要課件
評論
0/150
提交評論