1.if表達式
if表達式是有值的叫编,就是if、else最后一行返回的值银还。
例:val age = 30;
? ? ? ? val ?isAdult = if (age > 18) 1 else 0 ?//將返回值1賦給了isAdult
if表達式的類型推斷
由于if表達式是有值的努隙,而if和else自居的值類型可以不同,那么此時if表達式的值是兩個類型的公共父類型哀九。
例1:if(age > 18) ?1 else 0 ? //表達式的類型是Int剿配,因為1和0都是Int
例2:if (age > 18) ?"adult" ?else ?0 ?//此時if和else的值分別是String和Int,則表達式的值的類型是Any阅束,Any是String和Int的公共父類型呼胚。
如果if后沒有else,默認(rèn)else的值是Unit息裸,用()表示蝇更,類似于java中的void或者null
2.語句終結(jié)符
默認(rèn)情況下,Scala不需要語句終結(jié)符呼盆。默認(rèn)將每一行作為一個語句年扩,多行語句使用{}代碼塊,如果多條語句放在一行访圃,要用;作為語句終結(jié)符厨幻。
3.輸入輸出
輸出:
print("Hello World")
println("Hello World")
printf格式化輸出
例:printf("Hi, my name is %s, I'm %d years old.", "Lily", 22)
輸入:
readLine()允許從控制臺讀取用戶輸入的數(shù)據(jù),類似java中的System.in和Scanner的作用
val age = readInt() ?//readInt()會將輸入的強轉(zhuǎn)成Int
4.循環(huán)
while do循環(huán),例:
var n = 10
while (n > 0) {
? ? println(n)
? ? n -= 1
}
for循環(huán)
a. ?var n = 10; for(i <- 1 to n) print(i + " ") ? //左箭頭<- 用于為變量i賦值 ?輸出 1 2 3 4 5 6 7 8 9 10
b. 使用until腿时,不包括上限况脆,例:
? ?var n = 10; for (i <- 1 until n) print(i + " ") //輸出:1 2 3 4 5 6 7 8 9
c. 對字符串進行遍歷 for(c <- "Hello World") print(c + " ") //輸出H e l l o? W o r l d
跳出循環(huán)
scala不支持break或continue語句。但從scala2.8開始提供了一種中斷循環(huán)的方式實現(xiàn)break語句批糟。Breaks的break函數(shù)
例:
import scala.util.control.Breaks._
breakable {
? ?var n = 10
? ?for(c <- "Hello World") {
? ? ? ?if(n == 5) break;
? ? ? ? print(c)
? ? ? ? n -= 1
? ? }
} ? //輸出Hello
高級for循環(huán)
a.多重for循環(huán)格了,使用;來設(shè)置多個區(qū)間
例:打印九九乘法表
for(i <- 1 to 9; j <- 1 to 9) {
? ? if(j == 9) {
? ? ? ? println(i * j)
? ? } else {
? ? ? ? print(i * j + " ")
? ? }
}
b. for循環(huán)過濾(if守衛(wèi)):
scala可以使用一個或多個if語句來過濾一些元素。語法如下:
for( var x <- List
if condition1; if condition2...
) {
? ? statement(s);
}
可以使用分號(;)來為表達式添加一個或多個的過濾條件徽鼎。
例:取偶數(shù)
for(i <- 1 to 100 if i % 2 == 0) println(i)
c. for循環(huán)使用yield構(gòu)造集合盛末,
語法如下:
var retVal = for (var x <- List?
? ? ?if condition1; if condition2...)yield x
循環(huán)中的 yield 會把當(dāng)前的元素記下來,保存在集合中否淤,循環(huán)結(jié)束后將返回該集合,賦值給retVal满败。
例:
object Test {
? ? def main(args: Array[String]) {
? ? ? ? var a = 0;
? ? ? ? val numList = List(1,2,3,4,5,6,7,8,9,10)
? ? ? ? var retVal = for(a <- numList
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if a != 3; if a < 8
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )yield a
? ? ? ? for( a <- retVal){
? ? ? ? ? ? print( ?a + " ?" );
? ? ? ? }
? ? }
} ?//輸出:1 2 4 5 6 7