表达式:一个具有执行结果的代码块,结果是具体的值或者()
表达式和语句的区别和优势:
scala > if(true)"true string" else "false string"
res14:String = true string
scala > if(false) 5 else "hello"
res15: Any = hello
scala > val i =10
i: Int =10
scala > if(true)"true string" else "false string"
res14:String = true string
和Java完全一样
if (age > 18) {
println("age > 18")
}
if (age > 18) {
println("age > 18")
}else{
println("age < 18")
}
但是,有一点与Java不同的是,Scala中的if表达式的值可以赋值给变量,比如:
val x = 6
val a = if (x>0) 1 else -1
上述代码执行结束后,a的值为1。
val x = 3
if (x>0) {
println("This is a positive number")
} else if (x==0) {
println("This is a zero")
} else {
println("This is a negative number")
}
注意:嵌套最好不超过三层
if(a==1){
print("1")
if(b==2){
print("2")
}else{
print("3")
}
}else{
print("4")
}
1、如果大括号{}内的逻辑代码只有一行,大括号可以省略
2、Scala中任意表达式都是有返回值的,也就意味着if else表达式其实是有返回结果的,具体返回结果取决于满足条件的代码体的最后一行内容
val age = 70
val res = if (age > 20){
println("1")
9+10
"yes"
}else{
7
}
输出:yes
3、Scala没有三元运算符
java:int result = flg ? 1:0
Scala:val result = if (flg) 1 else 0
4、Scala没有switch分支结构,而是使用模式匹配来处理
Scala为for循环提供非常多的特性,这些特性被称为for循环推导式或者for表达式
1、第一种(to)
for(i <- 1 to 3){
print(i+" ")
}
说明:
<-
规定好 to
规定for这种推导式,可以直接对集合进行遍历
var list = list("hello",10,20,"tom")
for(item <- list){
print(item)
}
输出结果:hello 10 20 tom
2、第二种(until)
for(i <- 1 until 3){
print(i+" ")
}
说明:
基本案例:
for(i <- 1 to 3 if i !=2){
print(i+" ")
}
说明:
for(i <- 1 to 3 ){
if(i !=2){
print(i+" ")
}
}
基本案例:
for(i <- 1 to 3 ; j = 4-i){
print(i+" ")
}
说明:
;
for(i <- 1 to 3){
val j = 4-i
print(i+" ")
}
基本案例:
for(i <- 1 to 3 ; j <- 1 to 3){
print(i+" ")
}
说明:
;
for(i <- 1 to 3){
for (j <- 1 to 3){
print(i+" ")
}
}
基本案例:
val res = for(i <- 1 to 10) yield i
println(res)
说明:
yield
关键字val res = for(i <- 1 to 10) yield {
if(){
i
}else{
"hello"
}
}
1、for(i <- Range(1,3,2))
Range(1,3,2):start为1,end为3,步长为2
2、for循环守卫
for (I <- 1 to 10 if i % 2 == 1)
步长为2
3、for(i <- 1 to 10 by 2)
基本语法
while(循环条件){
循环体(语句)
循环变量迭代
}
例子:
var i =0
while(i < 10){
print("hello")
i += 1
}
注意:
Scala去除break和contine关键字
1、使用break()
实现break
import scala.util.control.Breaks.break
var n =1
while(n<=20){
n+=1
if(n==18){
break()
}
}
2、使用if-else
或者循环守卫实现continue
基本语法
do{
循环体(语句)
循环变量迭代
}while(循环条件)
1、统计三个班的成绩情况,每个班5名同学,求出各个班的平均分和所有班级的平均分
思路:
import scala.io.StdIn
object TestScala {
def main(args: Array[String]): Unit = {
val classNum = 3
val stuNum = 5
var score = 0.0
var classScore = 0.0
var totalScore = 0.0
for(i <- 1 to classNum){
classScore=0.0
for(j<-1 to stuNum){
printf("请输入第%d个班级第%d个学生的成绩\n",i,j)
score = StdIn.readDouble()
classScore+=score
}
totalScore+=classScore
printf("第%d个班级的平均分为%.2f\n",i,classScore/stuNum)
}
printf("所有班级的平均分%.2f",totalScore/(stuNum*classNum))
}
}
2、九九乘法表
val num =9
for(i <- 1 to num){
for(j<-1 to i){
printf("%d * %d = %d\t",j,i,i*j)
}
println()
}