




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章運算符、表達式和語句
3.1運算符與表達式3.2語句概述3.3if語句3.4switch語句3.5循環語句3.6break和continue語句3.7for語句與數組3.1運算符與表達式Java提供了豐富的運算符,如算術運算符、關系運算符、邏輯運算符、位運算符等。本節將介紹大部分運算符。1.算術運算符與表達式
加減運算符:+,-,加減運算符的結合方向是從左到右。加減運算符的優先級是4級。乘,除和求余運算符:*,/,%,運算符的結合方向是從左到右。乘除運算符的操作元是整型或浮點型數據。*,/,%(取余)運算符的優先級是3級。用算術符號和括號連接起來的符合java語法規則的式子,稱為算術表達式,如:x+2*y-30+3*(y+5)。2.自增,自減運算符:++,--
自增、自減運算符是單目運算符,可以放在操作元之前,也可以放在操作元之后。操作元必須是一個整型或浮點型變量。作用是使變量的值增1或減1.++x(--x)表示在使用x之前,先使x的值加(減)1。x++(x--)表示在使用x之后,使x的值加(減)1。下一次粗略的看,++x和x++的作用相當于
x=x+1。但++x和x++的不同之處在于,++x是先執行
x=x+1再使用x的值,而x++是先使用x的值再執行x=x+1。如果x的原值是5,則:對于y=++x y的值為6,x的值也變為6。y的值為5,然后x的值變為6。對于y=x++ 3.算術混合運算的精度
精度從“低”到“高”排列的順序是:
byteshortintlongfloatdoubleJava將按運算符兩邊的操作元的最高精度保留結果的精度。例如:
5/2的結果是2,要想得到2.5,必須寫成5.0/2或5.0f/2。char型數據和整型數據運算結果的精度是int。例如:bytex=7;
那么‘B’+x;的結果應該是int因此下列寫法是不正確的,
charch=’B’+x;
應當寫成:charch=(char)(’B’+x);
Java在計算算術表達式的值時,使用下列計算精度規則:1.如果表達式中有雙精度浮點數(double型數據),則按雙精度進行運算。2.如果表達式中最高精度是單精度浮點數(float型數據),則按單精度進行運算。3.如果表達式中最高精度是long型整數,則按long精度進行運算。4.如果表達式中最高精度低于int型整數,則按int精度進行運算。精度從“低”到“高”排列的順序是:
byteshortintlongfloatdouble4.關系運算符與關系表達式關系運算符:<,>,<=,>=,!=,==關系運算符用來比較兩個值的關系。關系運算符的運算結果是boolean型,當運算符對應的關系成立時,運算結果是true,否則是false。例如,10<9的結果是false,5>1的結果是true,注意:因為算術運算符的級別高于關系運算符,10>20-17相當于10>(20-17),結果當然是true。
3!=5的結果是10>20-17的結果為truetrue結果為數值型的變量或表達式可以通過關系運算符(如表3.1所示)形成關系表達式。如,4>8,(x+y)>80。p35運算符優先級用法含義結合方向>6op1>op2大于左到右<6op1<op2小于左到右>=6op1>=op2大于等于左到右<=6op1<=op2小于等于左到右==7op1==op2等于左到右!=7op1!=op2不等于左到右
表3.1 關系運算符5.邏輯運算符與邏輯表達式
邏輯運算符包括:&&,||,!。表
3.2邏輯運算符運算符優先級用法含義結合方向&&||!11122op1&&op2op1||op2!op邏輯與邏輯或
邏輯非左到右
左到右
右到左其中&&、||為雙目運算符,實現邏輯與、邏輯或;!為單目運算符,實現邏輯非。邏輯運算符的操作元必須是boolean型數據,邏輯運算符可以用來連接關系表達式。結果為boolean
型的變量或表達式可以通過邏輯運算符合成為邏輯表達式。op1op2op1&&op2op1||op2!
op1truetruetruetruefalsetruefalsefalsetruefalsefalsetruefalsetruetruefalsefalsefalsefalsetrue用邏輯運算符進行邏輯運算,結果如表3.3所示。p23
表3.3 用邏輯運算符進行邏輯運算例如,2>8&&9>2的結果為false,2>8||9>2的結果為true。3!=521<25&&短路邏輯運算符6.賦值運算符與賦值表達式賦值運算符:=賦值運算符是雙目運算符,左面的操作元必須是變量,不能是常量或表達式。賦值運算符的優先級較低,是14級,結合方向右到左。賦值表達式的值就是“=”左面變量的值。注意:不要將賦值運算符“=”與等號運算符“==”混淆。設x是一個整型變量,y是一個boolean型變量,x=20
和y=true都是正確的賦值表達式,整型數據在內存中以二進制的形式表示,比如一個int
型的變量在內存中占4個字節共32位,int型數據7的二進制表示是
0000000000000000
00000000000001117.位運算符左面最高位是符號位,最高位是0表示正數,1表示負數。負數采用補碼表示,比如-8的補碼是
111111111111111111111111111111000這樣我們就可以對整型數據進行按位的運算,比如,對兩個整型數據對應的位進行運算得到一個新的整型數據。(1)“按位與”運算符“&”是雙目運算符,對兩個整型數據a,b
按位進行運算,運算結果是一個整型數據c。
例如a 0000000000000000
0000000000000111b 10000001101001011111001110101011&c 0000000000000000
0000000000000011
運算法則是:如果a,b
兩個數據對應位都是1,則c的該位是1,否則是0。如果b的精度高于a,那么結果c的精度和b相同。
(2)“按位或”運算符“|”是雙目運算符。對兩個整型數據a,b
按位進行運算,運算結果是一個整型數據c。
運算法則:是 如果a,b
兩個數據對應位都是0,則c的該位是0,否則是1。如果b的精度高于與a,那么結果c的精度和b相同。例如a 0000000000000000
0000000000000111b 10000001101001011111001110101011|c 10000001101001011111001110101111(3)“按位非”運算符“~”是單目運算符。對一個整型數據a按位進行運算,運算結果是一個整型數據c。
運算法則:是如果a對應位都是0,則c的該位是1否則是1。例如a 0000000000000000
0000000000000111~ab 10000001101001011111001110101011~b 1111111111111111
111111111111100001111110010110100000110001010100 ”^”是雙目運算符。對兩個整型數據a,b
按位進行運算,運算結果是一個整型數據
c。
運算法則:是如果a,b
兩個數據對應位相同,則c的該位是
0,否則是1。如果b的精度高于與a,那么結果c的精度和b相同。由異或運算法則可知:
a^a=0,a^0=a因此,如果c=a^b,那么a=c^b,即用同一個數對數a進行兩次”異或”運算的結果又是數a。c=a^b=
a^b^b=a^0=a(4)“按位異或”運算符c^b在下面的例子1中,利用”異或”運算的性質,對幾個字符進行加密并輸出密文,然后再解密。
例子1(效果如圖3.1)classExample3_1{publicstaticvoidmain(Stringargs[]){chara1='十',a2='點',a3='進',a4='攻';charsecret='8';a1=(char)(a1^secret);a2=(char)(a2^secret);a3=(char)(a3^secret);a4=(char)(a4^secret);
System.out.println("密文:"+a1+a2+a3+a4);a1=(char)(a1^secret);a2=(char)(a2^secret);a3=(char)(a3^secret);a4=(char)(a4^secret);
System.out.println("原文:"+a1+a2+a3+a4);}}位運算符也可以操作邏輯型數據,法則是:當a,b
都是true時,a&b
是true,否則a&b
是false。當a,b
都是false時,a|b
是false,否則a|b
是true。當a是true時,~a是false;當a是false時,~a是true.位運算符在操作邏輯型數據時,與邏輯運算符&&,||,!
不同的是:位運算符要計算完a和b的之后,再給出運算的結果。比如,x的初值是1,那么經過下列邏輯比較運算后,((y=1)==0))&&((x=6)==6));x的值仍然是1,但是如果經過下列位運算之后,((y=1)==0))&((x=6)==6));x的值將是6。■
位運算符也可以操作字符數據,但運算結果是int
型數據,例如:charx=’a’,y=’b’;那么x|y,x&y,x^y,~x的結果是int型。8.instanceof
運算符
該運算符是雙目運算符,左面的操作元是一個對象;右面是一個類。當左面的對象是右面的類創建的對象時,該運算符運算的結果是true
,否則是false。
9.運算符綜述Java的表達式就是用運算符連接起來的符合Java規則的式子。運算符的優先級決定了表達式中運算執行的先后順序。例如,x<y&&!z相當于(x<y)&&(!z),沒有必要去記憶運算符號的優先級別,在編寫程序時可盡量的使用括號()運算符號來實現你想要的運算次序,以免產生難以閱讀或含糊不清的計算順序。運算符的結合性決定了并列相同級別的運算符的先后順序,例如,加減的結合性是從左到右,8-5+3相當于
(8-5)+3。再如:邏輯否運算符!的結合性是從右到左,!!x相當于!(!x)。
表3.4 運算符的優先級和結合性優先級描述運算符結合性分隔符[]().,;
對象歸類,
自增自減運算,instanceof++--!右到左邏輯非算術乘除運算*/%左到右算術加減運算+-左到右移位運算>><<>>>左到右大小關系運算<<=>>=左到右相等關系運算==!=左到右按位與運算&左到右按位異或運算^左到右按位或運算|左到右
表3.4 運算符的優先級和結合性優先級描述運算符結合性邏輯與運算&&左到右邏輯或運算||左到右三目條件運算?:左到右賦值運算=右到左3.2語句概述
Java里的語句可分為以下五類:
1.方法調用語句
System.out.println(“Hello");2.表達式語句由一個表達式構成一個語句,最典型的是賦值語句。如:x=23;
一個表達式的最后加上一個分號就構成了一個語句。分號是語句不可缺少的部分。
3.復合語句可以用{}把一些語句括起來構成復合語句。
{z=23+x;
System.out.println("hello");}4.空語句
;5.控制語句包括條件語句和switch開關語句。6.package語句和import語句
package語句和import語句和類,對象有關,將在第4章講解。3.3if條件分支語句
Java語言的控制語句有2種類型,即條件語句,和switch開關語句。1.條件控制語句(1)if語句的一般形式:
if(表達式){若干語句
}真表達式{若干語句}假
if后面()內的表達式的值必須是boolean
類型,當值為true時,則執行緊跟著的復合語句;如果表達式的值為false,則執行程序中if語句后面的其他語句。復合語句如果只有一個語句,{}可以省略不寫,但為了增強程序的可讀性最好不要省略!例2將變量a,b,c按從小到大順序排列輸出
publicclassExample3_2{publicstaticvoidmain(String
args[]){
inta=9,b=5,c=7,t;
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;}
System.out.println("a="+a+",b="+b+",c="+c);}}(2)if-else語句的一般形式:if(表達式){若干語句
}else{若干語句
}表達式{若干語句}假{若干語句}真
if后面()內的表達式的值必須是boolean
型的。如果表達式的值為true,則執行緊跟著的復合語句;如果表達式的值為false,則執行else后面的復合語句。復合語句是由{}括起來的若干個語句。下列是有語法錯誤的if-else語句,if(x>0)y=10;z=20;elsey=-100;
正確的寫法是
if(x>0){y=10;z=20;}elsey=100;注:
if和else后面的復合句里如果只有一個語句,{}可以省略不寫,但為了增強程序的可讀性最好不要省略。有時為了編程的需要,else或if后面的大括號里可以沒有語句。例3.4publicclassExample3_3{publicstaticvoidmain(Stringargs[]){
intmath=65,english=85;if(math>60){System.out.println("數學及格了");}else{System.out.println("數學不及格");}
if(english>90){System.out.println("英語是優");}else{System.out.println("英語不是優");}
System.out.println("我在學習控制語句");
}}(3)if語句的擴充形式表達式1false表達式2false…表達式nfalse語句1語句2語句nIf(表達式1)語句1elseif(表達式2)語句2…elseif(表達式n)
語句n
if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3……elseif(表達式m)語句melse語句n
if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3……elseif(表達式m)語句melse語句n
if(魚香肉絲)買魚香肉絲
else
if(燒茄子)買燒茄子
else
if(燒豆角)買燒豆角
……
else
if(土豆絲)買土豆絲
else不買
if(魚香肉絲)買魚香肉絲
elseif(燒茄子)買燒茄子
elseif(燒豆角)買燒豆角
……elseif(土豆絲)買土豆絲
else不買3.4switch開關語句
switch語句是多分支的開關語句,它的一般格式定義如下(其中break語句是可選的):switch(表達式){case常量值1:
若干個語句
break;case常量值2:
若干個語句
break;...case常量值n:
若干個語句
break;default:
若干語句}
switch語句中表達式的值必須是整型或字符型,但不能是long;常量值1到常量值n必須也是整型或字符型。
switch語句首先計算表達式的值,如果表達式的值和某個case后面的常量值相同,就執行該case里的若干個語句直到碰到break語句為止。若沒有一個常量與表達式的值相同,則執行default后面的若干個語句。其中default是可有可無的,如果它不存在,并且所有的常量值都和表達式的值不相同,那么switch語句就不會進行任何處理。注意!在同一個switch語句中,case后的常量值必須互不相同。例4importjava.util.Scanner;publicclassExample3_4{publicstaticvoidmain(String
args[]){
intnumber;
System.out.println("輸入正整數(回車確定)");Scannerreader=newScanner(System.in); number=reader.nextInt();
switch(number){ case9: case131: case12:System.out.println(number+"是三等獎"); break; case209: case596: case27:System.out.println(number+"是二等獎"); break; case875: case316: case59:System.out.println(number+"是一等獎"); break; default:System.out.println(number+"未中獎");}}}3.5循環語句
1.for循環語句for語句是java程序設計中最有用的循環語句之一,for語句的格式如下:for(表達式1;表達式2;表達式3){若干語句
}
for語句中的復合語句{若干語句},稱為循環體。表達式1負責完成變量的初始化。表達式式2是值為
boolean型的表達式,稱為循環條件。表達式3用來修整變量,改變循環條件。for語句的執行過程是這樣的:
首先計算表達式1,完成必要的初始化工作;再判斷表達式2的值,若表達式2的值為true,則執行循環體;執行完循環體之后緊接著計算表達式3,以便改變循環條件,這樣一輪循環就結束了。
第二輪循環從計算表達式2開始,若表達式2的值仍為true,則繼續循環,否則跳出整個for語句執行后面的語句,如圖3.6所示。for(表達式1;表達式2;表達式3){若干語句
}表達式1表達式2循環體表達式3for(表達式1;表達式2;表達式3){若干語句
}truefalse例5計算8+88+888+8888……的前12項和
publicclassExample3_5{publicstaticvoidmain(String
args[]){longsum=0,a=8,item=a,n=12,i=1;
for(i=1;i<=n;i++){sum=sum+item;item=item*10+a;}
System.out.println(sum);}}2.while循環一般格式:
while(表達式){
若干語句
}3.do-while循環一般格式:
do{
若干語句
}while(表達式);當{}中只有一條語句時,大括號{}可以省略,但最好不要省略,以便增加程序的可讀性。注
do-while循環和while循環的區別是 do-while的循環體至少被執行一次。表達式{若干語句}假真While循環語句表達式{若干語句}假真do-While循環語句例6用while語句計算1+1/2!+1/3!+1/4!…的前20項
publicclassExample3_6{publicstaticvoidmain(String
args[]){doublesum=0,item=1;
inti=1,n=20;
while(i<=n){sum=sum+item;i=i+1;item=item*(1.0/i);}
System.out.println("sum="+sum);}}3.6break和continue語句
break和continue語句是指用關鍵字break或continue加上分號構成的語句,例如:
break;在循環體中可以使用break語句和continue語句。在一個循環中,比如循環50次的循環語句中,如果在某次循環中執行了break語句,那么整個循環語句就結束。如果在某次循環中執行了continue語句,那么本次循環就結束,即不再執行本次循環中循環體中continue語句后面的語句,而轉入進行下一次循環。
真表達式1語句1表達式2語句2While循環語句假continue真假break例7publicclassExample3_7{publicstaticvoidmain(Stringargs[]){
intsum=0,i,j;for(i=1;i<=10;i++){if(i%2==0)//計算1+3+5+7+9continue;sum=sum+i;}
System.out.println("sum="+sum);for(j=2;j<=100;j++)//求50以內的素數
{for(i=2;i<=j/2;i++){if(j%i==0)break;}if(i>j/2){System.out.println(""+j+"是素數");}}}}3.7for語句與數組
JDK1.5后,對for語句的功能給予擴充、增強,以便更好地遍歷數組。語法格式如下:for(聲明循環變量:數組的名字){…}其中,聲明的循環變量的類型必須和數組的類型相同。這種形式的for語句類似自然語言中的“foreach”語句,為了便于理解上述for語句,可以將這種形式的for語句中翻譯成“對于循環變量依次取數組的每一個元素的值”。
例子8分別使用for語句的傳統方式和改進方式遍歷數組。
publicclassExample3_8{publicstaticvoidmain(Stringargs[]){
inta[]={1,2,3,4};charb[]={'a','b','c','d'};
for(intn=0;n<a.length;n++){//傳統方式
System.out.println(a[n]);}
for(intn=0;n<b.length;n++){//傳統方式
System.out.println(b[n]);}
for(int
i:a){//循環變量i依次取數組a的每一個元素的值(改進方式)
System.out.println(i);}for(charch:b){//循環變量ch依次取數組b的每一個元素的值(改進方式)
System.out.println(ch);}}}3.8應用舉例
前面講過:可以使用Scanner類創建一個對象:
Scannerreader=newScanner(System.in);◆reader對象調用下列方法,讀取用戶在命令行(例如,MS-DOS窗口)輸入的各種基本類型數據:
nextBoolean()、nextByte()、nextShort()、nextInt()
nextLong()、nextFloat()、nextDouble()。
◆上述方法執行時都會堵塞,程序等待用戶在命令行輸入數據回車確認。上述方法執行時都會阻塞,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 店面賣給別人合同范本
- 采購代理合作協議合同范本
- 勞動合同簽訂合同范本
- 非標鋼筋出售合同范本
- 有償婚姻介紹合同范本
- 古宅店面出租合同范本
- 產品聯合出品合同范例
- 危險品銷售合同范例
- 勞務合同范例填過
- 公司簡稱合同范例
- 部編版四年級下冊必讀《十萬個為什么》閱讀測試題(分章節)
- 5G網絡安全挑戰與應對策略
- 小組合作學習小組長培訓
- 《兩彈一星》課件
- 樂理視唱練耳簡明教程課后習題答案
- 如何培養幼兒的語言表達能力
- 2023年株洲市社區工作者招聘考試真題
- 汽車維修車間消防安全培訓
- DL-T 5847-2021 配電系統電氣裝置安裝工程施工質量檢驗及評定規程
- 幼兒園優質公開課:小班語言《小兔乖乖》課件
- 學用電風扇(課件)人教版勞動六年級上冊
評論
0/150
提交評論