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,默认else的值是Unit,用()表示,类似于java中的void或者null
2.语句终结符
默认情况下,Scala不需要语句终结符。默认将每一行作为一个语句,多行语句使用{}代码块,如果多条语句放在一行,要用;作为语句终结符。
3.输入输出
输出:
print("Hello World")
println("Hello World")
printf格式化输出
例:printf("Hi, my name is %s, I'm %d years old.", "Lily", 22)
输入:
readLine()允许从控制台读取用户输入的数据,类似java中的System.in和Scanner的作用
val age = readInt() //readInt()会将输入的强转成Int
4.循环
while do循环,例:
var n = 10
while (n > 0) {
println(n)
n -= 1
}
for循环
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
跳出循环
scala不支持break或continue语句。但从scala2.8开始提供了一种中断循环的方式实现break语句。Breaks的break函数
例:
import scala.util.control.Breaks._
breakable {
var n = 10
for(c <- "Hello World") {
if(n == 5) break;
print(c)
n -= 1
}
} //输出Hello
高级for循环
a.多重for循环,使用;来设置多个区间
例:打印九九乘法表
for(i <- 1 to 9; j <- 1 to 9) {
if(j == 9) {
println(i * j)
} else {
print(i * j + " ")
}
}
b. for循环过滤(if守卫):
scala可以使用一个或多个if语句来过滤一些元素。语法如下:
for( var x <- List
if condition1; if condition2...
) {
statement(s);
}
可以使用分号(;)来为表达式添加一个或多个的过滤条件。
例:取偶数
for(i <- 1 to 100 if i % 2 == 0) println(i)
c. for循环使用yield构造集合,
语法如下:
var retVal = for (var x <- List
if condition1; if condition2...)yield x
循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合,赋值给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