第3章運(yùn)算符、表達(dá)式與語(yǔ)句_第1頁(yè)
第3章運(yùn)算符、表達(dá)式與語(yǔ)句_第2頁(yè)
第3章運(yùn)算符、表達(dá)式與語(yǔ)句_第3頁(yè)
第3章運(yùn)算符、表達(dá)式與語(yǔ)句_第4頁(yè)
第3章運(yùn)算符、表達(dá)式與語(yǔ)句_第5頁(yè)
已閱讀5頁(yè),還剩85頁(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章運(yùn)算符、表達(dá)式與語(yǔ)句

本章導(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.語(yǔ)句概述11.分支語(yǔ)句12.循環(huán)語(yǔ)句13.跳轉(zhuǎn)語(yǔ)句按照運(yùn)算符所操作數(shù)據(jù)的個(gè)數(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)先級(jí)是4級(jí)。(2)乘、除和求余運(yùn)算符乘、除和求余運(yùn)算的運(yùn)算符號(hào)為*、/、%,都是雙目運(yùn)算符。*、/、%運(yùn)算符的結(jié)合性是從左到右,例如:2*3/8,先計(jì)算2*3,然后再將得到的結(jié)果除以8。乘、除和求余運(yùn)算的操作元是整型或浮點(diǎn)型數(shù)據(jù)。*、/、%運(yùn)算符的優(yōu)先級(jí)是3級(jí)。

(3)自增、自減運(yùn)算符自增、自減運(yùn)算的運(yùn)算符號(hào)為:++、--,都是單目運(yùn)算符,運(yùn)算符的優(yōu)先級(jí)是2級(jí)。運(yùn)算符可以放在操作元之前,也可以放在操作元之后,但操作元必須是一個(gè)整型或浮點(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,則:對(duì)于y=++x;y的值為6。對(duì)于y=x++;y的值為5,然后x的值變?yōu)?。(4)算術(shù)表達(dá)式用算術(shù)符號(hào)和操作元連接起來(lái)的符合Java語(yǔ)法規(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,必須寫(xiě)成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++自減右,左對(duì)于二元運(yùn)算符,運(yùn)算結(jié)果的數(shù)據(jù)類型一般為兩個(gè)操作數(shù)中表達(dá)范圍較大的類型。例如,一個(gè)整數(shù)和浮點(diǎn)數(shù)運(yùn)算的結(jié)果為浮點(diǎn)數(shù)。對(duì)于一元運(yùn)算符,運(yùn)算結(jié)果的類型與操作數(shù)的類型相同。自增、自減運(yùn)算符有前綴和后綴兩種形式,當(dāng)是前綴形式(即++、--符號(hào)出現(xiàn)在變量的左側(cè))時(shí),對(duì)變量實(shí)施的運(yùn)算是“先運(yùn)算后使用”;當(dāng)是后綴形式(即++、--符號(hào)出現(xiàn)在變量的右側(cè))時(shí),對(duì)變量實(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型,因此下列寫(xiě)法是不正確的,charch=’H’+k;應(yīng)當(dāng)寫(xiě)成:charch=(char)(’H’+k);返回在Java中,"%"(求模運(yùn)算符)的操作數(shù)可為浮點(diǎn)數(shù),如52.3%10=2.3;Java對(duì)"+"運(yùn)算進(jìn)行了擴(kuò)展,可作字符串連接運(yùn)算符,如"ab"+"efd"得"abefd";做"+"運(yùn)算時(shí),如果一個(gè)操作數(shù)是字符串,其它操作數(shù)自動(dòng)轉(zhuǎn)換成字符串.如:

Strings;s="s:"+4*5;

//結(jié)果是s="s:20";byte,short,char等類型進(jìn)行混合運(yùn)算時(shí),會(huì)先自動(dòng)轉(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));//對(duì)于整數(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));//對(duì)于浮點(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));//先自增,后使用}}程序舉例分析:在打印輸出語(yǔ)句中,+除了可以進(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í)行語(yǔ)句false_statement,要求這兩條語(yǔ)句返回同樣(相容)的數(shù)據(jù)類型。例如:result==sum?100:2*num;條件運(yùn)算符除~為右結(jié)合外,其余為左結(jié)合。操作數(shù)的類型一般為整型或字符型。&,|,^三個(gè)運(yùn)算符可以用于boolean。">>"右移是用符號(hào)位來(lái)填充右移后留下的空位,">>>"是用零來(lái)填充空位.若兩個(gè)數(shù)據(jù)的長(zhǎng)度不同,如a&b,a為byte型,b為int型,系統(tǒng)首先會(huì)將a的左側(cè)24位填滿,若a為正,則填滿0,若a為負(fù),填滿1即進(jìn)行“符號(hào)擴(kuò)充”。注意事項(xiàng)3.2關(guān)系運(yùn)算符與關(guān)系表達(dá)式

關(guān)系運(yùn)算符用來(lái)比較兩個(gè)值的關(guān)系,關(guān)系運(yùn)算符的運(yùn)算結(jié)果是boolean型數(shù)據(jù),當(dāng)運(yùn)算符對(duì)應(yīng)的關(guān)系成立時(shí),運(yùn)算結(jié)果是true,否則是false。(1)大小關(guān)系運(yùn)算符大小關(guān)系運(yùn)算的符號(hào)分別是:>、>=、<、<=,都是雙目運(yùn)算符,操作元是數(shù)值型的常量、變量或表達(dá)式。例如,10<9的結(jié)果是false,5>1的結(jié)果是true。在書(shū)寫(xiě)時(shí)要特別注意的是“<=”是一個(gè)完整的符號(hào),在“<”和“=”之間不要含有空格。大小關(guān)系運(yùn)算符的級(jí)別是6級(jí),例如,10>20-17的結(jié)果為true,因?yàn)樗阈g(shù)運(yùn)算符的級(jí)別高于關(guān)系運(yùn)算符,10>20-17相當(dāng)于10>(20-17)。

(2)等與不等關(guān)系等與不等關(guān)系運(yùn)算的符號(hào)分別是:“==”、“!=”,都是雙目運(yùn)算符。運(yùn)算符的級(jí)別是7級(jí)。“==”和“!=”都是由2個(gè)字符組成的一個(gè)完整的符號(hào),書(shū)寫(xiě)時(shí)不要含有空格。注意不要將后面講述的賦值運(yùn)算符“=”與等號(hào)運(yùn)算符“==”混淆。(3)關(guān)系表達(dá)式結(jié)果為數(shù)值型的變量或表達(dá)式可以通過(guò)關(guān)系運(yùn)算符形成關(guān)系表達(dá)式。例如,24>18,(x+y+z)>30+x等。返回關(guān)系運(yùn)算符關(guān)系運(yùn)算符用來(lái)比較兩個(gè)值之間的大小,結(jié)果為布爾值,true或者false,而不是1和0運(yùn)算符示例含義==Op1==Op2比較兩個(gè)數(shù)是否相等!=Op1!=Op2比較兩個(gè)數(shù)據(jù)是否不等<Op1<Op2比較一個(gè)是否小于另一個(gè)>Op1>Op2比較一個(gè)是否大于另一個(gè)<=Op1<=Op2比較一個(gè)是否小于等于另一個(gè)>=Op1>=Op2比較一個(gè)是否大于等于另一個(gè)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)算用來(lái)實(shí)現(xiàn)boolean型數(shù)據(jù)的邏輯“與”、“或”和“非”運(yùn)算,運(yùn)算結(jié)果是boolean型數(shù)據(jù)。(1)邏輯“與”和邏輯“或”邏輯“與”和邏輯“或”運(yùn)算的符號(hào)是:&&、||,是雙目運(yùn)算符,操作元是boolean型的變量或求值結(jié)果是boolean型數(shù)據(jù)的表達(dá)式?!?&”的運(yùn)算法則是:當(dāng)2個(gè)操作元的值都是true時(shí),運(yùn)算結(jié)果是true,否則是false?!皘|”的運(yùn)算法則是:當(dāng)2個(gè)操作元的值都是flase時(shí),運(yùn)算結(jié)果是false,否則是true。“&&”和“||”的級(jí)別分別是11和12級(jí),結(jié)合性是左到右。例如,1>8&&9>2的結(jié)果為false,1>8||6>2的結(jié)果為true。由于關(guān)系運(yùn)算符的級(jí)別高于&&和||的級(jí)別,所以,1>8&&9>2相當(dāng)于(1>8)&&(9>2)。

(2)邏輯“非”邏輯“非”運(yùn)算的符號(hào)是:!,是單目運(yùn)算符,操作元在左面。當(dāng)操作元的值是TURE時(shí),運(yùn)算結(jié)果是FALSE;反之為T(mén)URE。“!”的運(yùn)算級(jí)別是2級(jí),結(jié)合性從右到左。例如,??!X相當(dāng)于!(!X)。(3)邏輯表達(dá)式結(jié)果為boolean型的變量或表達(dá)式可以通過(guò)邏輯運(yùn)算符形成邏輯表達(dá)式。例如,24>18&&4<0,x!=0||y!=0。返回邏輯運(yùn)算符的短路運(yùn)算短路計(jì)算,就是從左向右依次計(jì)算每個(gè)條件是否成立,如果在前面的計(jì)算中,已經(jīng)可以得出整個(gè)復(fù)合條件表達(dá)式的計(jì)算結(jié)果,則后面不再計(jì)算。例如:inti=5,對(duì)于表達(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是一個(gè)整型變量,y是一個(gè)boolean型變量,x=120和y=false都是正確的賦值表達(dá)式,賦值運(yùn)算符的優(yōu)先級(jí)較低,是14級(jí),結(jié)合方向右到左。賦值表達(dá)式的值就是“=”左面變量的值。注意不要將賦值運(yùn)算符“=”與等號(hào)運(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á)式類型長(zhǎng)時(shí),系統(tǒng)會(huì)自動(dòng)將表達(dá)式轉(zhuǎn)化為較長(zhǎng)的類型,如int轉(zhuǎn)換為long,這時(shí)也可以賦值,稱之為賦值相容如果類型變量比表達(dá)式類型短,則賦值不相容,編譯時(shí)會(huì)產(chǎn)生錯(cuò)誤。這時(shí),需要使用類型強(qiáng)制轉(zhuǎn)換才能進(jìn)行賦值。例如:intsmallval=99L;floatz1=12.414;intsmallval=(int)99L;floatz1=(float)12.414;位運(yùn)算(含移位運(yùn)算和位運(yùn)算)不是對(duì)整個(gè)數(shù)進(jìn)行運(yùn)算,而是對(duì)該數(shù)表示的二進(jìn)制位上的0和1進(jìn)行運(yùn)算Java用補(bǔ)碼表示二進(jìn)制數(shù)1表示為二進(jìn)制為

00000000000000000000000000000001(4個(gè)字節(jié))-1表示為二進(jìn)制為11111111111111111111111111111111(4個(gè)字節(jié))3.5移位運(yùn)算符

位運(yùn)算符運(yùn)算符示例含義

&Op1

&

Op2使Op1和Op2按位相與

|Op1

|

Op2使Op1和Op2按位相或

~~Op對(duì)Op按位取反

^Op1^Op2使Op1和Op2按位異或

<<Op1<<

Op2使Op1左移Op2位,右補(bǔ)0

>>Op1>>

Op2使Op1右移Op2位(帶符號(hào),左邊補(bǔ)充符號(hào)位)

>>>Op1>>>Op2使Op1無(wú)符號(hào)右移Op2位(左邊始終補(bǔ)添0)3.5移位運(yùn)算符

位運(yùn)算符用來(lái)對(duì)二進(jìn)制位進(jìn)行操作,分為左移位操作和右移位操作。(1)左移位運(yùn)算符左移位運(yùn)算的符號(hào)為:<<,是雙目運(yùn)算符。左移位運(yùn)算符左面的操作元稱作被移位數(shù),右面的操作數(shù)稱作移位量,操作元必須是整型類型的數(shù)據(jù)。假設(shè)a是一個(gè)被移位的整型數(shù)據(jù),n是位移量。

a<<n運(yùn)算的結(jié)果是通過(guò)將a的所有位都左移n位,每左移一個(gè)位,左邊的高階位上的0或1被移出丟棄,并用0填充右邊的低位。

對(duì)于byte或short型數(shù)據(jù),a<<n的運(yùn)算結(jié)果是int型精度。當(dāng)進(jìn)行

a<<2

運(yùn)算時(shí),計(jì)算系統(tǒng)首先將a升級(jí)為int型數(shù)據(jù),對(duì)于正數(shù)將高位用0填充;負(fù)數(shù)用1填充,然后在進(jìn)行移位運(yùn)算。例如,對(duì)于

bytea=-8;11111000

在進(jìn)行a<<1運(yùn)算時(shí),首先將11111000生級(jí)為int型,將高位用1填充:

11111111111111111111111111111000

然后在進(jìn)行移位運(yùn)算得到-16:

11111111111111111111111111110000

因此,如果把a(bǔ)<<1的結(jié)果賦值給一個(gè)byte型變量就必須進(jìn)行強(qiáng)制轉(zhuǎn)換運(yùn)算:

byteb=(byte)(a<<1);

在進(jìn)行a<<n運(yùn)算時(shí),如果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相同。對(duì)于long型數(shù)據(jù),系統(tǒng)總是先計(jì)算出n%64的結(jié)果m,然后進(jìn)行a<<m運(yùn)算。(2)右移位運(yùn)算符右移位運(yùn)算的符號(hào)為:>>,是雙目運(yùn)算符。假設(shè)a是一個(gè)被移位的整型數(shù)據(jù),n是位移量。

a>>n運(yùn)算的結(jié)果是通過(guò)將a的所有位都右移n位,每右移一個(gè)位,右邊的低階位被移出丟棄,并用0或1填充左邊的高位,a是正數(shù)用0填充,負(fù)數(shù)時(shí)用1填充。因此,a每右移一次,如果該數(shù)的每一計(jì)算有效位都沒(méi)有從低位移出時(shí),就相當(dāng)于將a除以2并舍棄了余數(shù)。整數(shù)不斷右移位的最后結(jié)果一定是0,而負(fù)數(shù)不斷右移位的最后結(jié)果是-1。對(duì)于byte或short型數(shù)據(jù),a>>n的運(yùn)算結(jié)果是int型精度。

在進(jìn)行a>>n運(yùn)算時(shí),如果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相同。對(duì)于long型數(shù)據(jù),系統(tǒng)總是先計(jì)算出n%64的結(jié)果m,然后進(jìn)行a>>m運(yùn)算。在下面的例子1中,用戶輸入移位運(yùn)算的兩個(gè)操作元,程序給出右移和左移后的結(jié)果。返回舉例:運(yùn)算符<<<<十進(jìn)制數(shù)二進(jìn)制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2200000000000000000000000000000010運(yùn)算結(jié)果2000000000000000000000000000010100在沒(méi)有溢出的情況下,左移一位相當(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)算符,對(duì)兩個(gè)整型數(shù)據(jù)a、b按位進(jìn)行運(yùn)算,運(yùn)算結(jié)果是一個(gè)整型數(shù)據(jù)c。運(yùn)算法則是:如果a、b兩個(gè)數(shù)據(jù)對(duì)應(yīng)位都是1,則c的該位是1,否則是0。如果b的精度高于a,那么結(jié)果c的精度和b相同。(2)“按位或”運(yùn)算符“|”是雙目運(yùn)算符。對(duì)兩個(gè)整型數(shù)據(jù)a、b按位進(jìn)行運(yùn)算,運(yùn)算結(jié)果是一個(gè)整型數(shù)據(jù)c。運(yùn)算法則是:如果a、b兩個(gè)數(shù)據(jù)對(duì)應(yīng)位都是0,則c的該位是0,否則是1。如果b的精度高于a,那么結(jié)果c的精度和b相同。(3)“按位非”運(yùn)算符“~”是單目運(yùn)算符。對(duì)一個(gè)整型數(shù)據(jù)a按位進(jìn)行運(yùn)算,運(yùn)算結(jié)果是一個(gè)整型數(shù)據(jù)c。運(yùn)算法則是:如果a對(duì)應(yīng)位是0,則c的該位是1,否則是0。(4)“按位異或”運(yùn)算符“^”是雙目運(yùn)算符。對(duì)兩個(gè)整型數(shù)據(jù)a、b按位進(jìn)行運(yùn)算,運(yùn)算結(jié)果是一個(gè)整型數(shù)據(jù)c。運(yùn)算法則是:如果a、b兩個(gè)數(shù)據(jù)對(duì)應(yīng)位相同,則c的該位是0,否則是1。如果b的精度高于a,那么結(jié)果c的精度和b相同。位運(yùn)算符在操作邏輯型數(shù)據(jù)時(shí),與邏輯運(yùn)算符&&、||、!不同的是:位運(yùn)算要計(jì)算完a和b之后再給出運(yùn)算的結(jié)果。在下面的例子2中,利用“異或”運(yùn)算的性質(zhì),對(duì)幾個(gè)字符進(jìn)行加密并輸出密文,然后再解密。運(yùn)行結(jié)果見(jiàn)圖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)算符是一個(gè)3目運(yùn)算符,它的符號(hào)是:“?:”,需要連接3個(gè)操作元,用法如下:

op1?op2:op3

要求第一個(gè)操作元op1的值必須是boolean型數(shù)據(jù)。運(yùn)算法則是:當(dāng)op1的值是true時(shí),op1?op2:op3運(yùn)算的結(jié)果是op2的值;當(dāng)op1的值是false時(shí),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)算符,左面的操作元是一個(gè)對(duì)象,右面是一個(gè)類。當(dāng)左面的對(duì)象是右面的類創(chuàng)建的對(duì)象時(shí),該運(yùn)算的結(jié)果是true,否則是false。該運(yùn)算符將在第4章以后使用。返回3.9一般表達(dá)式

Java的一般表達(dá)式就是用運(yùn)算符及操作元連接起來(lái)的符合Java規(guī)則的式子,簡(jiǎn)稱表達(dá)式。一個(gè)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語(yǔ)句概述

Java里的語(yǔ)句可分為以下5類:(1)方法調(diào)用語(yǔ)句在第4章將介紹類、對(duì)象等概念,對(duì)象可以調(diào)用類中的方法產(chǎn)生行為,如:例子1中的

reader.nextInt();

(2)表達(dá)式語(yǔ)句一個(gè)表達(dá)式的最后加上一個(gè)分號(hào)就構(gòu)成了一個(gè)語(yǔ)句,稱作表達(dá)式語(yǔ)句。分號(hào)是語(yǔ)句不可缺少的部分。例如,賦值語(yǔ)句:

x=23;

(3)復(fù)合語(yǔ)句可以用“{”和“}”把一些語(yǔ)句括起來(lái)構(gòu)成復(fù)合語(yǔ)句,一個(gè)復(fù)合語(yǔ)句也稱作一個(gè)代碼塊。例如,

{z=23+x;System.out.println("hello");}

(4)控制語(yǔ)句控制語(yǔ)句包括:條件分支語(yǔ)句、循環(huán)語(yǔ)句和跳轉(zhuǎn)語(yǔ)句。(5)package語(yǔ)句和import語(yǔ)句

package語(yǔ)句和import語(yǔ)句與類、對(duì)象有關(guān),將在第4章講解。返回塊(復(fù)合語(yǔ)句)是用一對(duì)花括號(hào)括起來(lái)的任意數(shù)量的簡(jiǎn)單Java語(yǔ)句。塊容許在任何Java程序設(shè)計(jì)的結(jié)構(gòu)中擁有多條簡(jiǎn)單語(yǔ)句,否則結(jié)構(gòu)本身可能只含有一條簡(jiǎn)單語(yǔ)句。注:(1)塊容許嵌套;(2)不能在嵌套的塊類聲明相同名字的變量。復(fù)合語(yǔ)句Java中提供了兩條基本的分支選擇語(yǔ)句:if語(yǔ)句和switch語(yǔ)句,可以形成三種形式的選擇結(jié)構(gòu):(1)雙分支選擇結(jié)構(gòu):if/else(2)單分支選擇結(jié)構(gòu):if(3)多分支選擇結(jié)構(gòu):switch3.11分支語(yǔ)句3.11分支語(yǔ)句1.條件分支語(yǔ)句(1)if-else語(yǔ)句.if-else語(yǔ)句是Java中的一條語(yǔ)句,由一個(gè)“if”、“else”和兩個(gè)復(fù)合語(yǔ)句按一定格式構(gòu)成,if-else語(yǔ)句的格式如下:

if(表達(dá)式){若干語(yǔ)句}else{若干語(yǔ)句

}

一條if-else語(yǔ)句的作用是根據(jù)不同的條件產(chǎn)生不同的操作,執(zhí)行法則如下:

if后面()內(nèi)的表達(dá)式的值必須是boolean型的。如果表達(dá)式的值為true,則執(zhí)行緊跟著的復(fù)合語(yǔ)句;如果表達(dá)式的值為false,則執(zhí)行else后面的復(fù)合語(yǔ)句。1、if語(yǔ)句的基本形式if(布爾表達(dá)式) {語(yǔ)句塊1}else {語(yǔ)句塊2}2、省略了else子句的if語(yǔ)句if(布爾表達(dá)式) {語(yǔ)句塊1}if語(yǔ)句if或else控制的對(duì)象可以是單個(gè)語(yǔ)句(statement),也可以是程序塊(block)。條件condition可以是任何返回布爾值的表達(dá)式。else子句是可選的。

(2)多條件if-elseif-else語(yǔ)句程序有時(shí)需要根據(jù)多條件來(lái)選擇某一操作,這時(shí)就可以使用if-elseif-else語(yǔ)句。if-elseif-else語(yǔ)句是Java中的一條語(yǔ)句,由一個(gè)“if”、若干個(gè)“elseif”、一個(gè)“else”與若干個(gè)復(fù)合語(yǔ)句按一定規(guī)則構(gòu)成。語(yǔ)句的格式如下:

if(布爾表達(dá)式1) {語(yǔ)句塊1} elseif(布爾表達(dá)式2){語(yǔ)句塊2} elseif(布爾表達(dá)式3){語(yǔ)句塊3}

…. else{語(yǔ)句塊n}publicclassc3_1{ publicstaticvoidmain(Stringargs[]) { intgrade=76; if(grade>=90)System.out.println(“成績(jī):優(yōu)”); elseif(grade>=80)System.out.println(“成績(jī):良”); elseif(grade>=70)System.out.println(“成績(jī):中”); elseif(grade>=60)System.out.println(“成績(jī):及格”); elseSystem.out.println(“成績(jī):不及格”); }}示例程序c3_1.java(1)Java編譯器是將else與最近的if組合在一起,除非用花括號(hào){}指定不同的匹配方式。(2)當(dāng)語(yǔ)句塊包含多條簡(jiǎn)單語(yǔ)句時(shí),必須用花括號(hào){}將這些語(yǔ)句括起來(lái),否則會(huì)出錯(cuò)。使用if嵌套時(shí)的注意事項(xiàng)

有時(shí)為了編程的需要,復(fù)合語(yǔ)句中可以沒(méi)有任何語(yǔ)句。一條if-elseif-else語(yǔ)句的作用是根據(jù)不同的條件產(chǎn)生不同的操作,執(zhí)行法則如下:

if以及elseif后面()內(nèi)的表達(dá)式的值必須是boolean型的。該語(yǔ)句執(zhí)行時(shí),首先計(jì)算if后括號(hào)中的表達(dá)式的值,如果該表達(dá)式的值為true,則執(zhí)行緊跟著的復(fù)合語(yǔ)句,然后就結(jié)束整個(gè)語(yǔ)句的執(zhí)行;如果if后括號(hào)中的表達(dá)式的值為false,就依次再計(jì)算后面的elseif的表達(dá)式的值,直到出現(xiàn)某個(gè)表達(dá)式的值為true為止,然后執(zhí)行該elseif后面的復(fù)合語(yǔ)句,結(jié)束整個(gè)語(yǔ)句的執(zhí)行。如果所有的表達(dá)式的值都是false,就執(zhí)行else后面復(fù)合語(yǔ)句,結(jié)束整個(gè)語(yǔ)句的執(zhí)行。在下面的例子3中,用戶在鍵盤(pán)輸入3個(gè)數(shù),程序判斷這3個(gè)數(shù)能構(gòu)成什么形狀的三角形。2.switch開(kāi)關(guān)語(yǔ)句switch語(yǔ)句是多分支的開(kāi)關(guān)語(yǔ)句,它的一般格式定義如下:switch(表達(dá)式){case常量值1:若干個(gè)語(yǔ)句

break;

case常量值2:若干個(gè)語(yǔ)句

break;

………case常量值n:若干個(gè)語(yǔ)句

break;

default:若干語(yǔ)句

}publicclassc3_2{ publicstaticvoidmain(Stringargs[]) { intgrade=76; switch(grade/10) {case10: case9:System.out.println(“成績(jī):優(yōu)”);break; case8:System.out.println(“成績(jī):良”);break; case7:System.out.println(“成績(jī):中”);break; case6:System.out.println(“成績(jī):及格”);break; default:System.out.println(“成績(jī):不及格”); } }}示例程序c3_3.java(1)switch語(yǔ)句后面的表達(dá)式類型可以是byte,char,short,int,不容許float,double,long;(2)case后面的值應(yīng)各不相同,且類型應(yīng)與表達(dá)式類型一致;(3)default可省略不要;(4)若去掉break語(yǔ)句,在執(zhí)行完成第一個(gè)匹配case語(yǔ)句后面的語(yǔ)句塊之后,會(huì)繼續(xù)執(zhí)行其余case語(yǔ)句后面的語(yǔ)句塊,而不管表達(dá)式的值是否與case語(yǔ)句的值匹配。(5)如果沒(méi)有一個(gè)case常量與表達(dá)式的值相匹配,則執(zhí)行default語(yǔ)句。(6)case語(yǔ)句只是起到一個(gè)標(biāo)號(hào)作用,用來(lái)查找匹配的入口并從此處開(kāi)始執(zhí)行其后的語(yǔ)句序列,注意:

switch語(yǔ)句中表達(dá)式的值必須是整型或字符型;常量值1到常量值n必須也是整型或字符型。switch語(yǔ)句首先計(jì)算表達(dá)式的值,如果表達(dá)式的值和某個(gè)case后面的常量值相同,就執(zhí)行該case里的若干個(gè)語(yǔ)句,直到碰到break語(yǔ)句為止。若沒(méi)有任何常量值與表達(dá)式的值相同,則執(zhí)行default后面的若干個(gè)語(yǔ)句。其中default是可有可無(wú)的,如果它不存在,并且所有的常量值都和表達(dá)式的值不相同,那么switch語(yǔ)句就不會(huì)進(jìn)行任何處理。需要注意的是,在同一個(gè)switch語(yǔ)句中,case后的常量值必須互不相同。下面的例子4使用了switch語(yǔ)句,用戶在鍵盤(pán)輸入一個(gè)代表月份的整數(shù),程序輸出是該月是在年度的第幾季度。返回循環(huán)分類:(1)不確定循環(huán)(2)確定循環(huán)Java提供了三種循環(huán)語(yǔ)句:(1)while(2)do-while(3)for3.12循環(huán)語(yǔ)句3.12循環(huán)語(yǔ)句1.while循環(huán)

while語(yǔ)句的一般格式:

while(表達(dá)式){若干語(yǔ)句

}while語(yǔ)句由關(guān)鍵字while、括號(hào)中的一個(gè)求值為boolean型數(shù)據(jù)的表達(dá)式和一個(gè)復(fù)合語(yǔ)句組成,其中的復(fù)合語(yǔ)句稱作循環(huán)體,循環(huán)體只有一條語(yǔ)句時(shí),大括號(hào)“{}”可以省略,但最好不要省略,以便增加程序的可讀性。表達(dá)式稱作循環(huán)條件。while語(yǔ)句的執(zhí)行規(guī)則是:(1)計(jì)算表達(dá)式的值,如果該值是true時(shí),就進(jìn)行(2),否則進(jìn)行(3)。(2)執(zhí)行循環(huán)體,再進(jìn)行(1)(3)結(jié)束while語(yǔ)句的執(zhí)行

while語(yǔ)句執(zhí)行規(guī)則如流程圖3.5所示。while語(yǔ)句執(zhí)行規(guī)則如流程圖3.5所示。表達(dá)式

循環(huán)體truefalse圖3.5while循環(huán)語(yǔ)句//計(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{若干語(yǔ)句

}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)語(yǔ)句

3.for循環(huán)

for語(yǔ)句的一般格式:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3){若干語(yǔ)句

}for語(yǔ)句由關(guān)鍵字for、括號(hào)中用分號(hào)分割的3個(gè)表達(dá)式,以及一個(gè)復(fù)合語(yǔ)句組成,其中的“表達(dá)式2”必須是一個(gè)求值為boolean型數(shù)據(jù)的表達(dá)式,而復(fù)合語(yǔ)句稱作循環(huán)體。

for語(yǔ)句的執(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語(yǔ)句(4)結(jié)束for語(yǔ)句的執(zhí)行.

一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如,6=1+2+3。下面的例子6使用for循環(huán)計(jì)算出1000內(nèi)的全部完數(shù)

返回(1)在for語(yǔ)句中,括號(hào)內(nèi)的三個(gè)表達(dá)式均可省略。當(dāng)省略了任何一個(gè)表達(dá)式時(shí),必須在循環(huán)語(yǔ)句塊中的其他位置,否則容易造成死循環(huán)。(2)在for語(yǔ)句的“初值表達(dá)式”和“循環(huán)過(guò)程表達(dá)式”中可以使用逗號(hào)“,”。(3)在循環(huán)中小心使用對(duì)浮點(diǎn)數(shù)是否相等的測(cè)試。例如:

for(doublex=0;x!=10;x+=0.1)………….

是死循環(huán)

注意:(4)在for語(yǔ)句的第一個(gè)初值表達(dá)式中聲明了一個(gè)變量,該變量的作用域從這里開(kāi)始一直到for循環(huán)體結(jié)束。且在循環(huán)內(nèi)部定義的變量,在循環(huán)外部不能使用。例如:

for(intI=1;I<=10;I++)intI;{ for(intI=1;I<=10;I++)

……………….{}…………..//變量I在此處無(wú)定義}//在此處變量I有定義注意:(5)在不同的for循環(huán)體語(yǔ)句塊中,可以定義相同名稱的變量。例如:

for(intI=1;I<=10;I++) {

………… }

………. for(intI=11;I<=20;I++) {

………… }注意:(6)for循環(huán)等價(jià)于while循環(huán)。即:

for(statement1;expression1;expression2)statement2;statement1;while(expression1){statement2; expression2;}注意://計(jì)算中獎(jiǎng)幾率importjavax.swing.*;publicclassc3_4{ publicstaticvoidmain(String[]args) { Stringinput=JOptionPane.showInputDialog("你希望抽取多少個(gè)數(shù)?"); intk=Integer.parseInt(input); input=JOptionPane.showInputDialog("一共有多少個(gè)數(shù)?"); intn=Integer.parseInt(input); intresult=1; for(inti=1;i<=k;i++)result=result*(n-i+1)/i; System.out.println("你中獎(jiǎng)的幾率是1/"+result); System.exit(0); }}示例程序c3_4.java

循環(huán)控制主要有兩種方法:利用計(jì)數(shù)器控制循環(huán),利用標(biāo)記控制循環(huán)。大多數(shù)循環(huán)利用計(jì)數(shù)器的原理來(lái)控制。設(shè)計(jì)計(jì)數(shù)器控制的循環(huán)程序,注意以下幾點(diǎn):(1)循環(huán)控制變量的名字;(2)循環(huán)控制變量的初值;(3)每一次執(zhí)行循環(huán)時(shí),循環(huán)控制變量的增量(或減量)(4)測(cè)試循環(huán)控制變量的終值條件。標(biāo)記控制循環(huán)主要適用于無(wú)法事先知道循環(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)可以自身嵌套,也可以相互嵌套。但在嵌套的過(guò)程中不能出現(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)中使用逗號(hào)

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語(yǔ)句的使用

for(inte:a)sum=sum+e; System.out.println("thesumis"+sum); }}可以用for語(yǔ)句遍歷一個(gè)數(shù)組或集合中的所有元素。

該程序中,“:”表示“in”的意思,for(inte:a)就是“foreachinteina”,即“對(duì)于數(shù)組a中的每個(gè)整數(shù)e”。通過(guò)定義一個(gè)整數(shù)變量e表示數(shù)組中的每個(gè)元素。for-each循環(huán)看上去比一般的for循環(huán)漂亮的多,不需要使用下標(biāo)。Foreachbreak語(yǔ)句continue語(yǔ)句return語(yǔ)句3.13跳轉(zhuǎn)語(yǔ)句Break語(yǔ)句可以獨(dú)立使用,而continue語(yǔ)句只能在循環(huán)結(jié)構(gòu)的循環(huán)體中。一、break語(yǔ)句

break語(yǔ)句通常有不帶標(biāo)號(hào)和帶標(biāo)號(hào)兩種:

break;breakLab;

其中:break是關(guān)鍵字,Lab是用戶定義的標(biāo)號(hào)。一、break語(yǔ)句在Java中,break語(yǔ)句有3種作用。第一,在switch語(yǔ)句中,它被用來(lái)終止一個(gè)語(yǔ)句序列或者語(yǔ)句塊。第二,它能被用來(lái)退出一個(gè)循環(huán)。第三,它能作為一種“先進(jìn)”的goto語(yǔ)句來(lái)使用。Break語(yǔ)句的應(yīng)用使用break退出循環(huán)break語(yǔ)句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的一種形式來(lái)用

booleant=true;first:{second:{

溫馨提示

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