版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
15.內(nèi)建控制結(jié)構(gòu)一、if表達(dá)式二、while循環(huán)三、for循環(huán)與for表達(dá)式四、try表達(dá)式和match表達(dá)式五、continue和break六、變量的作用域目錄2一、if表達(dá)式3
if(條件){ //代碼塊1 }else{ //代碼塊2 }一、if表達(dá)式1.1if...else語句條件代碼塊1truefalse語法結(jié)構(gòu):
代碼塊2布爾表達(dá)式當(dāng)代碼塊2為空時,else也可以省略不寫4一、if表達(dá)式1.2if...elseif...else語句語法結(jié)構(gòu):
if(條件1){ //代碼塊1 }else
if(條件2){ //代碼塊2 }else{ //代碼塊3 }給定一個Int類型的數(shù),判斷該數(shù)和零的關(guān)系。代碼舉例:defwhichInt(x:Int)={
if(x==0)"Zero"
elseif(x>0)"PositiveNumber"
else"NegativeNumber"
}5一、if表達(dá)式1.3if...else嵌套語句語法結(jié)構(gòu):
if(條件1){
if(條件2){ //代碼塊1 }else{ //代碼塊2 } }else{ //代碼塊3 }給定一個Int類型的數(shù),判斷該數(shù)和零的關(guān)系。代碼舉例:defwhichInt(x:Int)={
if(x==0)"Zero"
else{
if(x>0)"PositiveNumber"
else"NegativeNumber"
}
}6二、while循環(huán)7二、while循環(huán)2.1while語句條件代碼塊truefalse語法結(jié)構(gòu):代碼舉例:
while(條件){ //代碼塊 }varsum,i=0
while(i<=10){
sum+=i
i+=1
}8二、while循環(huán)2.2do...while語句條件代碼塊truefalse語法結(jié)構(gòu):相比while循環(huán),do…while循環(huán)在判斷條件之前,先執(zhí)行一次循環(huán)
do{
//代碼塊 }while(條件)代碼舉例:varsum,i=0
do{
sum+=i
i+=1
}while(i<10)9deffac_loop(x:Int):Int={
varres=1
varnum=x
while(num!=0){
res=res*num
num-=1
}
res
}2.3計算階乘代碼舉例二、while循環(huán)采用while循環(huán):循環(huán)變量初始化循環(huán)變量迭代res作為函數(shù)返回值102.3計算階乘代碼舉例二、while循環(huán)采用函數(shù)遞歸:所有的while循環(huán)都可以通過其它函數(shù)式風(fēng)格的語法來實現(xiàn),常見做法就是函數(shù)的自我遞歸調(diào)用。deffac_loop(x:Int):Int={
if(x==1)1
elsex*fac_loop(x-1)
}11三、for循環(huán)與for表達(dá)式12三、for循環(huán)與for表達(dá)式3.1for循環(huán)for(x<-Range){…}Range為區(qū)間,本質(zhì)上是Array對象。Range可以寫成itoj或iuntilj的形式?!?lt;-”可以理解成“in”,把集合對象的元素逐一與左側(cè)模式進(jìn)行匹配。輸出整數(shù)1~5代碼舉例:defmain(args:Array[String]):Unit={
for(i<-1to5)
println("i="+i)
}13三、for循環(huán)與for表達(dá)式3.1for循環(huán)在for循環(huán)中可以設(shè)置多個區(qū)間,并用“;”分割開來,實現(xiàn)類似于循環(huán)嵌套的作用。除了之外,還可以將多個區(qū)間或語句放在不同行讓編譯器自動推斷分號。輸出九九乘法表代碼舉例:defmain(args:Array[String]):Unit={
for{i<-1to9
j<-1to9}
println(i+"*"+j+"="+i*j)
}14三、for循環(huán)與for表達(dá)式3.2for遍歷集合數(shù)組(Array)、列表(List)、映射(Map)、集(Set)等均混入了特質(zhì)Iterable,為可迭代的集合對象。對于元組,需要先調(diào)用productIterator方法以獲取其迭代器,然后對該迭代器進(jìn)行遍歷。代碼舉例://列表遍歷
vala=List(1,2,3)
for(i<-a){
println("i="+i)
}//元組遍歷
valt1=(1,"a","b",true,2)
for(i<-t1.productIterator){
println("i="+i)
}15三、for循環(huán)與for表達(dá)式3.2for遍歷集合Scala不可變集中所有的集合16三、for循環(huán)與for表達(dá)式3.3for循環(huán)的過濾器可以使用若干個if表達(dá)式來過濾掉一些元素,也稱之為循環(huán)守衛(wèi)。代碼舉例:輸出0~10所有不能被3整除的整數(shù)。defmain(args:Array[String]):Unit={
for(i<-0to10;ifi%3!=0)
println("i="+i)
}17三、for循環(huán)與for表達(dá)式3.4for表達(dá)式for(seq)yieldexpressionseq代表一個序列,由“生成器”、“定義”和“過濾器”三種語句組成。能放進(jìn)for表達(dá)式里的對象,必須是一個可迭代的集合?!皔ield”的作用相當(dāng)于取出符合的元素,應(yīng)用到“expression”中。代碼舉例:將0~10所有不能被3整除的整數(shù)保存在變量res中并輸出。for表達(dá)式有返回值defmain(args:Array[String]):Unit={
valres=for(i<-0to10
ifi%3!=0)yieldi
for(i<-res)println(“i="+i)
}18classPerson(valname:String)
objectAliceextendsPerson("Alice")
objectTomextendsPerson("Tom")
objectTonyextendsPerson("Tony")
valpersons=List(Alice,Tom,Tony)
valTo=for{
p<-persons
n=p.name
if(nstartsWith"To")
}yieldn
println(To)三、for循環(huán)與for表達(dá)式3.4代碼舉例seq是由“生成器”、“定義”和“過濾器”三條語句組成可以分號隔開,或者分行讓編譯器自動推斷分號19四、try表達(dá)式和match表達(dá)式20四、try表達(dá)式和match表達(dá)式4.1拋出一個異常兩種拋出異常的情況操作非法,那么JVM會自動拋出異常。手動拋出異常,使用new構(gòu)造一個異常對象,并用關(guān)鍵字“throw”拋出。scala>thrownewIllegalArgumentException
java.lang.IllegalArgumentException
...28elided21defmain(args:Array[String]):Unit={
defintDivision(x:Int,y:Int)={
try{
x/y
}
catch{
caseex:ArithmeticException
=>println("Thedivisoriszero!")
}
}
println(intDivision(10,2))//5
println(intDivision(10,0))//Thedivisoriszero!
}4.2try-catch四、try表達(dá)式和match表達(dá)式處理除零異常代碼舉例try后面可以用花括號包含任意條代碼。產(chǎn)生異常時,JVM并不會立即拋出,而是被catch捕獲。catch捕獲異常后,處理方式一般借助偏函數(shù)22scala>defa():Int=tryreturn1finallyreturn2
a:()Int
scala>a
res0:Int=24.3try-catch-finally四、try表達(dá)式和match表達(dá)式不管有沒有異常產(chǎn)生,finally里的代碼一定會執(zhí)行。通常finally語句塊都是執(zhí)行一些清理工作,比如關(guān)閉文件等。finally中的返回值語句會覆蓋掉前面的返回值。23match表達(dá)式的作用相當(dāng)于“switch”,也就是把作用對象與定義的模式逐個比較,按匹配的模式執(zhí)行相應(yīng)的操作。4.4match表達(dá)式四、try表達(dá)式和match表達(dá)式模式匹配代碼舉例:defsomething(x:String)=xmatch{
case"Apple"=>println("Fruit!")
case"Tomato"=>println("Vegetable!")
case"Cola"=>println("Beverage!")
case_=>println("Huh?")
}
println(something("Cola"))//Beverage!
println(something("Toy"))//HUh?24五、continue和break25五、continue和break5.1C語言中的continue和break
在1-100的范圍內(nèi)進(jìn)行累加,如果數(shù)值能被3整除或者被5整除,則跳過該數(shù);如果能被3和5兩個數(shù)都整除,則累加結(jié)束并輸出結(jié)果。代碼舉例://代碼實現(xiàn)(C語言版)
inti=1;intsum=0;
while(i<=100){
if(i%3==0||i%5==0){
i=i+1;continue;
}
elseif(i%15==0)break;
else{
sum=sum+i;
i=i+1;
}
}26vari=1
varsum=0
varend_flag=false;
while(i<=100&&!end_flag){
if(i%3!=0||i%5!=0)
sum+=i
elseif(i%15==0)
end_flag=true
i+=1
}5.2不使用continue和break五、continue和break增加一個標(biāo)志位,作為循環(huán)條件,避免了break的使用。代碼舉例:改變判斷條件,免去continue的使用。275.3Scala中的break五、continue和break語法結(jié)構(gòu):
import
scala.util.control.Breaks._
breakable{
for(...){
if(...)break
}
}寫下break的地方,就會被編譯器標(biāo)記為可中斷。importscala.util.control.Breaks._
objecttest{
defmain(args:Array[String]):Unit={
vari=1
varsum=0
breakable{
while(i<=100){
if(i%3!=0||i%5!=0)sum+=i
elseif(i%15==0)break
i+=1
}
}
println("sum="+sum)
}
}28六、變量的作用域29六、變量的作用域6.1變量的作用域Scala變量作用范圍很明確,邊界就是花括號。defprintMultiTable()={
vari=1//只有i在作用域內(nèi)
while(i<=9){
varj
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大二(交通工程)交通規(guī)劃原理期末試題
- 2025年大學(xué)二年級(中醫(yī)康復(fù)技術(shù))針灸基礎(chǔ)試題及答案
- 2025年大學(xué)公共基礎(chǔ)(計算機(jī)應(yīng)用技能)試題及答案
- 2025年中職第一學(xué)年(物流服務(wù)與管理)物流倉儲管理試題及答案
- 2025年大學(xué)大四(理學(xué))理學(xué)專業(yè)畢業(yè)設(shè)計答辯測試題及解析
- 2025年高職建筑(建筑工程計量)試題及答案
- 2025年高職(大數(shù)據(jù)技術(shù))大數(shù)據(jù)分析案例應(yīng)用階段測試題及答案
- 2025年高職熱能與發(fā)電工程(熱力系統(tǒng)維護(hù))試題及答案
- 2025年大學(xué)社區(qū)護(hù)理實訓(xùn)(護(hù)理實操訓(xùn)練)試題及答案
- 2026年安慶職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題帶答案解析
- 2026國家電投招聘試題及答案
- 2024年人教版七7年級下冊數(shù)學(xué)期末質(zhì)量檢測題(附答案)
- 《基礎(chǔ)護(hù)理學(xué)(第七版)》考前強(qiáng)化模擬練習(xí)試題庫500題(含答案)
- 《水電工程水生生態(tài)調(diào)查與評價技術(shù)規(guī)范》(NB-T 10079-2018)
- GB/T 38537-2020纖維增強(qiáng)樹脂基復(fù)合材料超聲檢測方法C掃描法
- “多規(guī)合一”實用性村莊規(guī)劃質(zhì)檢軟件建設(shè)方案
- GB/T 20727-2006封閉管道中流體流量的測量熱式質(zhì)量流量計
- GB/T 16770.1-2008整體硬質(zhì)合金直柄立銑刀第1部分:型式與尺寸
- 義務(wù)教育體育與健康課程標(biāo)準(zhǔn)(2022年版)
- 湖南省鄉(xiāng)鎮(zhèn)衛(wèi)生院街道社區(qū)衛(wèi)生服務(wù)中心地址醫(yī)療機(jī)構(gòu)名單目錄
- 《Hadoop》數(shù)據(jù)分析系統(tǒng)
評論
0/150
提交評論