第3章運算符、表達式與語句_第1頁
第3章運算符、表達式與語句_第2頁
第3章運算符、表達式與語句_第3頁
第3章運算符、表達式與語句_第4頁
第3章運算符、表達式與語句_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第3章運算符、表達式與語句

本章導讀1.算術運算符和算術表達式2.關系運算符與關系表達式3.邏輯運算符與邏輯表達式4.賦值運算符與賦值表達式5.移位運算符6.位運算符7.條件運算符8.instanceof運算符9.一般表達式10.語句概述11.分支語句12.循環(huán)語句13.跳轉(zhuǎn)語句按照運算符所操作數(shù)據(jù)的個數(shù),可以將其分為一元運算符、二元運算符和三元運算符。按照操作數(shù)據(jù)的類型,可以將運算符分為算術運算符、賦值運算符、自增/自減運算符、條件運算符、位運算符、關系運算符、邏輯運算符等等。3.1算術運算符和算術表達式3.1算術運算符和算術表達式(1)加減運算符加減運算的結(jié)合性是從左到右。加減運算的操作元是整型或浮點型數(shù)據(jù),加減運算符的優(yōu)先級是4級。(2)乘、除和求余運算符乘、除和求余運算的運算符號為*、/、%,都是雙目運算符。*、/、%運算符的結(jié)合性是從左到右,例如:2*3/8,先計算2*3,然后再將得到的結(jié)果除以8。乘、除和求余運算的操作元是整型或浮點型數(shù)據(jù)。*、/、%運算符的優(yōu)先級是3級。

(3)自增、自減運算符自增、自減運算的運算符號為:++、--,都是單目運算符,運算符的優(yōu)先級是2級。運算符可以放在操作元之前,也可以放在操作元之后,但操作元必須是一個整型或浮點型變量(不能是常量或表達式)。運算符的作用是使變量的值增1或減1,如:

++x,--x表示在使用x之前,先使x的值加(減)1。

x++,x--表示在使用x之后,使x的值加(減)1。粗略地看,++x和x++的作用相當于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)算術表達式用算術符號和操作元連接起來的符合Java語法規(guī)則的式子,稱為算術表達式。如

x+2*y-30+3*(y+5)-12+n+(--n)。(5)算術混合運算的精度精度從“低”到“高”排列的順序是:

byteshortintlongfloatdoubleJava將按運算符兩邊的操作元的最高精度保留結(jié)果的精度,例如:5/2的結(jié)果是2,要想得到2.5,必須寫成5.0/2或5.0f/2。算數(shù)運算符運算符用法含義結(jié)合性二元運算符+op1+op2加法左-op1-op2減法左*op1*op2乘法左/op1/op2除法左%op1%op2模運算(求余)左一元運算符++op1正數(shù)右--op1負數(shù)右++++op1,op1++自增右,左----op1,op1++自減右,左對于二元運算符,運算結(jié)果的數(shù)據(jù)類型一般為兩個操作數(shù)中表達范圍較大的類型。例如,一個整數(shù)和浮點數(shù)運算的結(jié)果為浮點數(shù)。對于一元運算符,運算結(jié)果的類型與操作數(shù)的類型相同。自增、自減運算符有前綴和后綴兩種形式,當是前綴形式(即++、--符號出現(xiàn)在變量的左側(cè))時,對變量實施的運算是“先運算后使用”;當是后綴形式(即++、--符號出現(xiàn)在變量的右側(cè))時,對變量實施的運算是“先使用后運算”。算數(shù)運算符的特點char型數(shù)據(jù)和整型數(shù)據(jù)運算結(jié)果的精度是int。例如:bytek=18;那么‘H’+k;的結(jié)果是int型,因此下列寫法是不正確的,charch=’H’+k;應當寫成:charch=(char)(’H’+k);返回在Java中,"%"(求模運算符)的操作數(shù)可為浮點數(shù),如52.3%10=2.3;Java對"+"運算進行了擴展,可作字符串連接運算符,如"ab"+"efd"得"abefd";做"+"運算時,如果一個操作數(shù)是字符串,其它操作數(shù)自動轉(zhuǎn)換成字符串.如:

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

//結(jié)果是s="s:20";byte,short,char等類型進行混合運算時,會先自動轉(zhuǎn)換為int類型再運算。算數(shù)運算符的注意事項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ù),運算結(jié)果為整數(shù)

System.out.println("i%j="+(i%j));//求余數(shù)

System.out.println("a*b="+(a*b));System.out.println("a/b="+(a/b));//對于浮點數(shù),運算結(jié)果為浮點數(shù)

System.out.println("a%b="+(a%b));//浮點數(shù)求余,結(jié)果為浮點數(shù)

System.out.println("i++="+(i++));//先使用,后自增

System.out.println(“++i=”+(++i));//先自增,后使用}}程序舉例分析:在打印輸出語句中,+除了可以進行加法運算外,還可以進行字符串的連接,吧字符串和數(shù)值類型在一起進行運算,最后轉(zhuǎn)換為字符串輸出。條件運算符的格式如下:(boolean_expr)?true_statement:false_statement;其含義為:若boolean_expr為真,則執(zhí)行true_satatement;如果為假,則執(zhí)行語句false_statement,要求這兩條語句返回同樣(相容)的數(shù)據(jù)類型。例如:result==sum?100:2*num;條件運算符除~為右結(jié)合外,其余為左結(jié)合。操作數(shù)的類型一般為整型或字符型。&,|,^三個運算符可以用于boolean。">>"右移是用符號位來填充右移后留下的空位,">>>"是用零來填充空位.若兩個數(shù)據(jù)的長度不同,如a&b,a為byte型,b為int型,系統(tǒng)首先會將a的左側(cè)24位填滿,若a為正,則填滿0,若a為負,填滿1即進行“符號擴充”。注意事項3.2關系運算符與關系表達式

關系運算符用來比較兩個值的關系,關系運算符的運算結(jié)果是boolean型數(shù)據(jù),當運算符對應的關系成立時,運算結(jié)果是true,否則是false。(1)大小關系運算符大小關系運算的符號分別是:>、>=、<、<=,都是雙目運算符,操作元是數(shù)值型的常量、變量或表達式。例如,10<9的結(jié)果是false,5>1的結(jié)果是true。在書寫時要特別注意的是“<=”是一個完整的符號,在“<”和“=”之間不要含有空格。大小關系運算符的級別是6級,例如,10>20-17的結(jié)果為true,因為算術運算符的級別高于關系運算符,10>20-17相當于10>(20-17)。

(2)等與不等關系等與不等關系運算的符號分別是:“==”、“!=”,都是雙目運算符。運算符的級別是7級?!?=”和“!=”都是由2個字符組成的一個完整的符號,書寫時不要含有空格。注意不要將后面講述的賦值運算符“=”與等號運算符“==”混淆。(3)關系表達式結(jié)果為數(shù)值型的變量或表達式可以通過關系運算符形成關系表達式。例如,24>18,(x+y+z)>30+x等。返回關系運算符關系運算符用來比較兩個值之間的大小,結(jié)果為布爾值,true或者false,而不是1和0運算符示例含義==Op1==Op2比較兩個數(shù)是否相等!=Op1!=Op2比較兩個數(shù)據(jù)是否不等<Op1<Op2比較一個是否小于另一個>Op1>Op2比較一個是否大于另一個<=Op1<=Op2比較一個是否小于等于另一個>=Op1>=Op2比較一個是否大于等于另一個3.3邏輯運算符與邏輯表達式邏輯運算只能處理布爾類型的數(shù)據(jù),所得結(jié)果也是布爾值邏輯運算符支持短路運算

運算符示例含義結(jié)合性&&Op1&&Op2邏輯與運算左||Op1||Op2邏輯或運算左!!Op邏輯非運算右3.3邏輯運算符與邏輯表達式

邏輯運算用來實現(xiàn)boolean型數(shù)據(jù)的邏輯“與”、“或”和“非”運算,運算結(jié)果是boolean型數(shù)據(jù)。(1)邏輯“與”和邏輯“或”邏輯“與”和邏輯“或”運算的符號是:&&、||,是雙目運算符,操作元是boolean型的變量或求值結(jié)果是boolean型數(shù)據(jù)的表達式。“&&”的運算法則是:當2個操作元的值都是true時,運算結(jié)果是true,否則是false?!皘|”的運算法則是:當2個操作元的值都是flase時,運算結(jié)果是false,否則是true?!?&”和“||”的級別分別是11和12級,結(jié)合性是左到右。例如,1>8&&9>2的結(jié)果為false,1>8||6>2的結(jié)果為true。由于關系運算符的級別高于&&和||的級別,所以,1>8&&9>2相當于(1>8)&&(9>2)。

(2)邏輯“非”邏輯“非”運算的符號是:!,是單目運算符,操作元在左面。當操作元的值是TURE時,運算結(jié)果是FALSE;反之為TURE?!?”的運算級別是2級,結(jié)合性從右到左。例如,!!X相當于!(!X)。(3)邏輯表達式結(jié)果為boolean型的變量或表達式可以通過邏輯運算符形成邏輯表達式。例如,24>18&&4<0,x!=0||y!=0。返回邏輯運算符的短路運算短路計算,就是從左向右依次計算每個條件是否成立,如果在前面的計算中,已經(jīng)可以得出整個復合條件表達式的計算結(jié)果,則后面不再計算。例如:inti=5,對于表達式(i>8)&&(i<4)的計算為短路計算位運算符&,|,^可以用于邏輯運算,但是它們不支持短路計算。3.4賦值運算符與賦值表達式

賦值運算符:=。賦值運算符是雙目運算符,左面的操作元必須是變量,不能是常量或表達式。設x是一個整型變量,y是一個boolean型變量,x=120和y=false都是正確的賦值表達式,賦值運算符的優(yōu)先級較低,是14級,結(jié)合方向右到左。賦值表達式的值就是“=”左面變量的值。注意不要將賦值運算符“=”與等號運算符“==”混淆。

返回賦值運算符賦值運算符包括兩種:基本賦值運算符擴展賦值運算符基本賦值運算<變量名>=<表達式>其中,“=”是賦值運算符例如:intI,j;i=10;j=i+20擴展賦值運算符運算符示例含義+=count+=2count=count+2-=count-=2

count=count-2*=count*=2

count=count*2/=count/=2

count=count/2%=count%=2count=count%2賦值相容如果參加運算的變量類型和表達式類型相同,則可以賦值,稱之為類型相同;如果兩者類型不同,并且變量類型比表達式類型長時,系統(tǒng)會自動將表達式轉(zhuǎn)化為較長的類型,如int轉(zhuǎn)換為long,這時也可以賦值,稱之為賦值相容如果類型變量比表達式類型短,則賦值不相容,編譯時會產(chǎn)生錯誤。這時,需要使用類型強制轉(zhuǎn)換才能進行賦值。例如:intsmallval=99L;floatz1=12.414;intsmallval=(int)99L;floatz1=(float)12.414;位運算(含移位運算和位運算)不是對整個數(shù)進行運算,而是對該數(shù)表示的二進制位上的0和1進行運算Java用補碼表示二進制數(shù)1表示為二進制為

00000000000000000000000000000001(4個字節(jié))-1表示為二進制為11111111111111111111111111111111(4個字節(jié))3.5移位運算符

位運算符運算符示例含義

&Op1

&

Op2使Op1和Op2按位相與

|Op1

|

Op2使Op1和Op2按位相或

~~Op對Op按位取反

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

<<Op1<<

Op2使Op1左移Op2位,右補0

>>Op1>>

Op2使Op1右移Op2位(帶符號,左邊補充符號位)

>>>Op1>>>Op2使Op1無符號右移Op2位(左邊始終補添0)3.5移位運算符

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

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

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

a<<2

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

bytea=-8;11111000

在進行a<<1運算時,首先將11111000生級為int型,將高位用1填充:

11111111111111111111111111111000

然后在進行移位運算得到-16:

11111111111111111111111111110000

因此,如果把a<<1的結(jié)果賦值給一個byte型變量就必須進行強制轉(zhuǎn)換運算:

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

在進行a<<n運算時,如果a是byte、short或int型數(shù)據(jù),系統(tǒng)總是先計算出n%32的結(jié)果m,然后進行a<<m運算。例如,a<<33的計算結(jié)果與a<<1相同。對于long型數(shù)據(jù),系統(tǒng)總是先計算出n%64的結(jié)果m,然后進行a<<m運算。(2)右移位運算符右移位運算的符號為:>>,是雙目運算符。假設a是一個被移位的整型數(shù)據(jù),n是位移量。

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

在進行a>>n運算時,如果a是byte、short或int型數(shù)據(jù),系統(tǒng)總是先計算出n%32的結(jié)果m,然后進行a>>m運算,例如,a>>33的計算結(jié)果與a>>1相同。對于long型數(shù)據(jù),系統(tǒng)總是先計算出n%64的結(jié)果m,然后進行a>>m運算。在下面的例子1中,用戶輸入移位運算的兩個操作元,程序給出右移和左移后的結(jié)果。返回舉例:運算符<<<<十進制數(shù)二進制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2200000000000000000000000000000010運算結(jié)果2000000000000000000000000000010100在沒有溢出的情況下,左移一位相當于乘以2舉例:運算符>>>>十進制數(shù)二進制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2200000000000000000000000000000010運算結(jié)果100000000000000000000000000000001右移一位相當于除以23.6位運算符

(1)“按位與”運算符“&”是雙目運算符,對兩個整型數(shù)據(jù)a、b按位進行運算,運算結(jié)果是一個整型數(shù)據(jù)c。運算法則是:如果a、b兩個數(shù)據(jù)對應位都是1,則c的該位是1,否則是0。如果b的精度高于a,那么結(jié)果c的精度和b相同。(2)“按位或”運算符“|”是雙目運算符。對兩個整型數(shù)據(jù)a、b按位進行運算,運算結(jié)果是一個整型數(shù)據(jù)c。運算法則是:如果a、b兩個數(shù)據(jù)對應位都是0,則c的該位是0,否則是1。如果b的精度高于a,那么結(jié)果c的精度和b相同。(3)“按位非”運算符“~”是單目運算符。對一個整型數(shù)據(jù)a按位進行運算,運算結(jié)果是一個整型數(shù)據(jù)c。運算法則是:如果a對應位是0,則c的該位是1,否則是0。(4)“按位異或”運算符“^”是雙目運算符。對兩個整型數(shù)據(jù)a、b按位進行運算,運算結(jié)果是一個整型數(shù)據(jù)c。運算法則是:如果a、b兩個數(shù)據(jù)對應位相同,則c的該位是0,否則是1。如果b的精度高于a,那么結(jié)果c的精度和b相同。位運算符在操作邏輯型數(shù)據(jù)時,與邏輯運算符&&、||、!不同的是:位運算要計算完a和b之后再給出運算的結(jié)果。在下面的例子2中,利用“異或”運算的性質(zhì),對幾個字符進行加密并輸出密文,然后再解密。運行結(jié)果見圖3-2。

圖3-2返回舉例:運算符&&十進制數(shù)二進制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2900000000000000000000000000001001運算結(jié)果100000000000000000000000000000001用于將某些特定的位清0舉例:運算符||十進制數(shù)二進制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2900000000000000000000000000001001運算結(jié)果1300000000000000000000000000001101用于將某些特定的位置1舉例:運算符^^十進制數(shù)二進制數(shù)操作數(shù)1500000000000000000000000000000101操作數(shù)2900000000000000000000000000001001運算結(jié)果1200000000000000000000000000001100舉例:運算符~~十進制數(shù)二進制數(shù)操作數(shù)1500000000000000000000000000000101運算結(jié)果-6111111111111111111111111111100103.7條件運算符

條件運算符是一個3目運算符,它的符號是:“?:”,需要連接3個操作元,用法如下:

op1?op2:op3

要求第一個操作元op1的值必須是boolean型數(shù)據(jù)。運算法則是:當op1的值是true時,op1?op2:op3運算的結(jié)果是op2的值;當op1的值是false時,op1?op2:op3運算的結(jié)果是op3的值。例如,12>8?100:200的結(jié)果是100;12<8?100:200的結(jié)果是200。返回3.8instanceof運算符

該運算符是雙目運算符,左面的操作元是一個對象,右面是一個類。當左面的對象是右面的類創(chuàng)建的對象時,該運算的結(jié)果是true,否則是false。該運算符將在第4章以后使用。返回3.9一般表達式

Java的一般表達式就是用運算符及操作元連接起來的符合Java規(guī)則的式子,簡稱表達式。一個Java表達式必須能求值,即按著運算符的計算法則,可以計算出表達式的值。例如,假如intx=1,y=-2,n=10;那么,表達式

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)表達式語句一個表達式的最后加上一個分號就構成了一個語句,稱作表達式語句。分號是語句不可缺少的部分。例如,賦值語句:

x=23;

(3)復合語句可以用“{”和“}”把一些語句括起來構成復合語句,一個復合語句也稱作一個代碼塊。例如,

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

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

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

if(表達式){若干語句}else{若干語句

}

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

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

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

if(布爾表達式1) {語句塊1} elseif(布爾表達式2){語句塊2} elseif(布爾表達式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)當語句塊包含多條簡單語句時,必須用花括號{}將這些語句括起來,否則會出錯。使用if嵌套時的注意事項

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

if以及elseif后面()內(nèi)的表達式的值必須是boolean型的。該語句執(zhí)行時,首先計算if后括號中的表達式的值,如果該表達式的值為true,則執(zhí)行緊跟著的復合語句,然后就結(jié)束整個語句的執(zhí)行;如果if后括號中的表達式的值為false,就依次再計算后面的elseif的表達式的值,直到出現(xiàn)某個表達式的值為true為止,然后執(zhí)行該elseif后面的復合語句,結(jié)束整個語句的執(zhí)行。如果所有的表達式的值都是false,就執(zhí)行else后面復合語句,結(jié)束整個語句的執(zhí)行。在下面的例子3中,用戶在鍵盤輸入3個數(shù),程序判斷這3個數(shù)能構成什么形狀的三角形。2.switch開關語句switch語句是多分支的開關語句,它的一般格式定義如下:switch(表達式){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語句后面的表達式類型可以是byte,char,short,int,不容許float,double,long;(2)case后面的值應各不相同,且類型應與表達式類型一致;(3)default可省略不要;(4)若去掉break語句,在執(zhí)行完成第一個匹配case語句后面的語句塊之后,會繼續(xù)執(zhí)行其余case語句后面的語句塊,而不管表達式的值是否與case語句的值匹配。(5)如果沒有一個case常量與表達式的值相匹配,則執(zhí)行default語句。(6)case語句只是起到一個標號作用,用來查找匹配的入口并從此處開始執(zhí)行其后的語句序列,注意:

switch語句中表達式的值必須是整型或字符型;常量值1到常量值n必須也是整型或字符型。switch語句首先計算表達式的值,如果表達式的值和某個case后面的常量值相同,就執(zhí)行該case里的若干個語句,直到碰到break語句為止。若沒有任何常量值與表達式的值相同,則執(zhí)行default后面的若干個語句。其中default是可有可無的,如果它不存在,并且所有的常量值都和表達式的值不相同,那么switch語句就不會進行任何處理。需要注意的是,在同一個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(表達式){若干語句

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

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

循環(huán)體truefalse圖3.5while循環(huán)語句//計算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(表達式);do-while循環(huán)和while循環(huán)的區(qū)別是:do-while的循環(huán)體至少被執(zhí)行一次,如圖3.6所示。下面的例子5分別用while和do-while循環(huán)計算常數(shù)e的近似值:e=1+1/1+1/2!+1/3!+……。

循環(huán)體表達式truefalse圖3.6do-while循環(huán)語句

3.for循環(huán)

for語句的一般格式:

for(表達式1;表達式2;表達式3){若干語句

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

for語句的執(zhí)行規(guī)則是:(1)計算“表達式1”,完成必要的初始化工作(2)判斷“表達式2”的值,若“表達式2”的值為true,則進行(3),否則進行(4)。(3)執(zhí)行循環(huán)體,然后計算“表達式3”,以便改變循環(huán)條件,進行(2)。圖3.9使用for語句(4)結(jié)束for語句的執(zhí)行.

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

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

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

是死循環(huán)

注意:(4)在for語句的第一個初值表達式中聲明了一個變量,該變量的作用域從這里開始一直到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;}注意://計算中獎幾率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)控制主要有兩種方法:利用計數(shù)器控制循環(huán),利用標記控制循環(huán)。大多數(shù)循環(huán)利用計數(shù)器的原理來控制。設計計數(shù)器控制的循環(huán)程序,注意以下幾點:(1)循環(huán)控制變量的名字;(2)循環(huán)控制變量的初值;(3)每一次執(zhí)行循環(huán)時,循環(huán)控制變量的增量(或減量)(4)測試循環(huán)控制變量的終值條件。標記控制循環(huán)主要適用于無法事先知道循環(huán)次數(shù)的情況。循環(huá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(標記控制循環(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)嵌套//計算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)漂亮的多,不需要使用下標。Foreachbreak語句continue語句return語句3.13跳轉(zhuǎn)語句Break語句可以獨立使用,而continue語句只能在循環(huán)結(jié)構的循環(huán)體中。一、break語句

break語句通常有不帶標號和帶標號兩種:

break;breakLab;

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

booleant=true;first:{second:{

溫馨提示

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

評論

0/150

提交評論