package lyzx.com.basic.day01
import scala.util.control.Breaks._
/**
* 常用语法
* if/else
* while/for
*/
class T1 {
//在Scala中,if表达式是有值的,就是if或者else中最后一行语句返回的值
def f1(): Unit ={
val age = 1;
val result = if(age >18) 1 else 0;
println(result)
}
/**
* 由于if表达式是有值的,而if和else子句的值类型可能不同,
* 如果只有if
*
*/
def f2(): Unit ={
val age = 1
val result = if(age > 10) "成年人" else 0
println(result+" "+result.getClass.getName)
val result2 = if(age >10) "11"
println(result2+" "+result2.getClass.getName)
}
def f3(): Unit ={
//printf 具有格式化的作用
printf("i am %s,i am %d years old","lyh",19)
}
def f4(): Unit ={
val name = readLine("请输入你的名字:")
printf("name="+name)
}
/**
* scala的while循环和java中一样
*/
def f5(): Unit ={
var age = 1
while(age < 10){
println("age="+age)
age += 1
}
}
/**
* scala简易版的for循环
*/
def f6(): Unit ={
// 1 to 10 <==> [1,10]
for(i <- 1 to 5)
println("==>"+i)
// 1 until 10 <==> [1,10)
for(i <- 1 until 5){
println("->"+i)
}
//每次循环一个字符
for(ch <- "hello世界")
println(ch)
}
/**
* 在一个类中使用多个"generator"
* i相当于外层循环,j相当于内层循环
*
* i <- 1 to 30 if i % 10 == 0 相当于是一个过滤器,只有在1到30中符合 (i % 10 == 0)这个条件的才保留
* j <- 1 to 10 by 2 中by 2 表示步长为2
*/
def f7(): Unit ={
val g1 = 1 to 10
println(g1.getClass.getName)
for(i <- 1 to 30 if i % 10 == 0;j <- 1 to 10 by 2){
println("i="+i+" ,j="+j)
}
}
/**
* 99乘法表
*/
def f8(): Unit ={
for(i <- 1 to 9;j <- 1 to i){
print(i+"*"+j+"="+(i*j)+" ")
if(i == j)
println()
}
}
/**
* 可以在for循环列表中定义变量
*/
def f9(): Unit ={
for(i <- 1 to 10;from = 10 - i;j <- from to 12){
println(i+" "+j)
}
}
/**
* scala中没有提供类似于java中的break
* 所以要中断循环需要使用breakable
*/
def f10(): Unit ={
breakable{
for(i <- 1 to 10 by 2){
if(i == 6)
break;
println("i="+i)
}
}
}
/**
* 如果for循环以 yield结尾那么,for循环会形成一个集合
*/
def f11(): Unit ={
val result = for(i <-1 to 10 by 2) yield i*2
println(result +" "+result.getClass.getName)
}
}
object T1{
def main(args: Array[String]): Unit = {
val d = new T1();
d.f11()
}
}