結構
學會使用Scala中主要的結構控制語句
數組
學會數組的聲明與使用
映射
瞭解Scala中的映射的基礎知識
包與引用
Scala控制結構
判斷(if表達式)
循環(while/do語句)
枚舉(for表達式)
匹配(match表達式)
異常處理(throw/try)
輸出(print/println)
輸入(readLine)
判斷(if表達式)
檢測語句是否爲真,並執行以後的語句
if(A) B ; else C (「 ;」號能省略嗎?)
A能夠是任意返回布爾值的語句,或是布爾值的量,真則執行B,假則執行C;
當B爲空時,可寫成 if(!A) C
def min(x:Int,y:Int):Int={
var a=x
if(x>y) a=y
return a
}
if表達式能用以賦值
def min(x:Int,y:Int)= if(x>y) y else x
循環(while/do)
while語句包括狀態判斷與循環體,只要當前狀態判斷爲真,就執行循環體一遍;而後
進行下一次狀態判斷,判斷爲假時終止循環。
while(A) B
do語句與while相反,先執行循環體一遍,而後進行狀態判斷,狀態判斷爲真,則繼續
執行循環體,不然終止循環。
do B while(A)
m -= 1 m=m-1; m+=1 m=m+1
var m=3 var m=3
while(m!=0){ do{
println(m) println(m)
m-=1 m-=1
} }while(m!=0)
枚舉(for表達式)
For表達式能用任意條件進行各類形式枚舉,而在枚舉的過程當中能實現絕大部分的循環
功能且沒必要使用變量。
for(i <- e) E(i)
for表達式包括髮生器(i <- e)同函數體E(i),
發生器是遍歷e中的元素,每一次枚舉名爲i的新的val就被初始化
對於每一次枚舉,函數體E(i)都會執行一次,而其中的參數i由枚舉時進行賦值
e能夠是各類集合,包括數組、列、表達式等,或是有上下界的數值範圍:
1 to 4 (1=<i<=4);1 until 4 (1=<i<=4-1)(不包含上界)
for(i <- 1 to 4)
println(「No.」+ i)
枚舉(for表達式)
在for語句中使用if語句進行過濾
for(i <- e) if(A) E(i)
for(i <- 1 to 4)
if(i%2==0)
println(「No.」+ i)
for語句中能使用多個if語句進行過濾,if語句間不用「 ;」 間隔
for(i <- 1 to 4)
if(i%2==0)
if(i!=2)
println(「No.」+ i)
能把if語句寫入循環體,而非函數體中,此時要使用「;」 間隔
for(i <- 1 to 4;if i%2==0;if i!=2)println(「No.」+i)
枚舉(for表達式)
for語句實現嵌套枚舉只須要多加一個<-字句
for(i <- 𝑒1)for(j <- 𝑒2)E(i,j)
for(i <- 𝑒1;j <- 𝑒2)E(i,j)
for(i <- 𝑒1;if A;j <- 𝑒2;if B)E(i,j)
嵌套枚舉並不是是同時進行的枚舉;形如for(i <- 1 to 4;j <- 1 to 2),其枚舉形式是,先
枚舉i = 1,再完整枚舉j = 1,j = 2;而後是枚舉i =2,再完整枚舉j = 1,j =2
循環體的<-語句順序是影響循環結構
出於理解和閱讀要求,對於較長的循環體或者函數體,能夠進行分行
枚舉(for表達式)
for語句除了對枚舉值進行操做並釋放該值外,能夠用以賦值,即把每一次枚舉的值記
錄在集合中。
for(i <- e) yield E(i)
若E(i)由花括號括起,yield須在花括號外,即for(i <- e) yield {E(i)}
val No=
for(i <- 1 to 4)
yield i
yield保留字返回的類型跟for循環體第一個<-語句的集合類型相同,如非集合時,返回
的是序列
枚舉(for表達式)
for(i <- 「HELLO」)yield i
for(i <- 1 to 2)yield i.toChar
for(i <- 「HELLO」;j <- 1 to 2) yield (i+j).toChar
for(i <- 1 to 2;j <- 「HELLO」) yield (i+j).toChar
分別返回什麼結果呢?
String:HELLO
Vector<?,?>
String:IJFGMNMNPQ
Vector<I,J,F,G,M,N,M,N,P,Q>
匹配 (match表達式)
匹配 (match表達式)
匹配語句case後接 _ 表明的是任意,通常在最後的case語句中這麼寫,即匹配不到上
面的值時,執行
如 a match {
case e1 =>...
case e2 =>...
case _ =>....}
匹配語句返回的值有多種類型時,Scala不能執行類型推斷,而且只會返回Any類型
如 val final=a match {
case e1 => 「HI」
case e2 => ‘H’
case e3 => 123 }
異常處理(throw/try)
Scala處理異常通常經過throw拋出一個異常並停止
要麼捕獲並處理該異常,要麼簡單停止之
異常拋出:throw new IllegalArgumentException
異常捕獲與處理:try{函數體} catch{case…;case…}
異常捕獲並停止:try{函數體} finally{A.close()}
try{函數體} catch{case…;case…} finally{A.close()}
throw、 try-catch-finally表達式都能生成值
如:throw new IllegalArgumentException(「Error!」)
def f():Int=try{1} finally{2}
輸入輸出
輸出一般使用print或println函數,後者在輸出內容後追加一個換行符
println(A) A能夠是值、表達式等,如:
println(「A」) println(「A」+1)
當A是表達式時,輸出的是表達式的運行結果
輸入一般使用read函數,如readLine是從控制檯讀取一行輸入,指定類型時爲readT
,T是所要指定的類型,如readInt等
val name=readLine(「 Your name :\n」 ) readLine帶一個參數做爲提示字符串
val age=readInt()
其餘語句
return 語句表示返回某個值,可是Scala事實上無須使用return語句
對於函數來講,其默認返回值是最後出現的一個值,不用特別註明。如須要返回的值
並不是最後出現時,可在函數體後加上該值的標識符使之「出現」
聲明函數時使用return語句,必須聲明返回值的類型,如def abd():T={return}
break/continue在C++中很是常見的控制結構語句,但在Scala中是沒必要要的,能夠
使用布爾值類型的量經過IF語句進行控制數組