Scala中for循环的使用

基本语法

  • for(变量:数据类型 <- 数组|集合){} 。其中数据类型可省略。
  • 注意:Scala的循环中,没有continue和break关键字。

基本用法

  • 1 to 10:生成1-10范围内的数据,左右都包含。
for (i: Int <- 1 to 10) {
    
    
  println(i)
}

// 其实1 to 10 真正的写法应该是
for (i <- 1.to(10)) {
    
    
  println(i)
}

// range型的数据可以用by指定步长
for (i <- 1 to 10 by 2) {
    
    
  println(i)
}

// range型数据也可以倒序,但是要指定步长为-1
for (i <- 10 to 1 by -1) {
    
    
  println(i)
}

// 通过reverse关键字倒序
for (i <- 1 to 9 reverse){
    
    
  println(i)
}
  • 1 until 10:生成1到10范围内的数据,包左不包右。
for (i <- 1 until 10) {
    
    
  println(i)
}

循环守卫(可用于代替continue的功能)

  • 在循环条件中,可以同时加上判断条件,符合条件的循环才会被执行。
for (i <- 1 to 10; if i % 2 == 0) {
    
    
  println(i)
}

// 跳过i=3此次循环
for (i <- 1 to 10 ; if i != 3) {
    
    
  println(i)
}

循环嵌套

  • Scala中,循环嵌套可以在一个小括号中指定两个循环条件。
  • 基本格式:for(外层循环条件 ; 内层循环条件) {}
  • 循环()可以用{}来代替
for (i <- 1 to 3 ; j <- 1 to 4) {
    
    
  println(i + "\t" + j)
}

// scala中循环嵌套也可以用{}代替()
for {
    
    
  i <- 1 to 3;
  j <- 1 to 4
} {
    
    
  println(i + "\t" + j)
}

引入变量

for (i <- 1 to 4; j = 4 - i) {
    
    
  println(s"i=${i},j=${j}")
}

循环返回值

  • Scala中for循环可以通过yield关键字,将循环体最后一句代码的值返回给Vector集合。
val ints: immutable.IndexedSeq[Int] = for (i <- 1 to 5) yield i
println(ints)

val ints2: immutable.IndexedSeq[Int] = for (i <- 1 to 5) yield i * 2
println(ints2)

练习

  • 打印九九乘法表
for (i <- 1 to 9; j <- 1 to i) {
    
    
  print(s"${j} * ${i} = " + (j * i) + "\t")
  if (j == i) {
    
    
    println()
  }
}
  • 打印等腰三角形,如下,一共9层
/*
                  *
                 ***
                *****
               *******
*/
// i控制*的数量,j控制空格的数量,scala中可以用字符串与数字相乘做多次复制
for (i <- 1 to 9 ; j = 9 - i) {
    
    
  println(" " * j + "*" * (2 * (i-1)) + "*")
}

for (i <- 1 to 17 by 2; j = (17 - i) / 2) {
    
    
  println(" " * j + "*" * i)
}

猜你喜欢

转载自blog.csdn.net/FlatTiger/article/details/114361027