Scala内建控制-多重循环

40 阅读1分钟

多重循环的基本使用

1.for可以替换成while循环。

2.循环的嵌套可以有多个,数量不限。

3.里外层循环执行的次数不相同。

for ( 循环变量 <- 数据集) {  
  for(){  
    for(){  
    }  
  }  
}

使用如下:

object E01 {
  def main(args: Array[String]): Unit = {
    var k = 0
    for (i <- 0 to 5) { // 外层循环

      println(i) // 输出6次 它由 循环变量 i 的值所决定

      for (j <- 11 to 20) { // 内层循环
        k = k + 1
        println(k, i, j) // 输出60次
      }
    }
  }
}

输出特殊图形

object E02 {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 5) {
      // 打印 i 个 i 字符
      for (_ <- 1 to i) {
        print(i)
      }
      // 换行
      println()
    }
  }
}

输出如图

image.png

打印乘法口诀表

object E05 {
  def main(args: Array[String]): Unit = {

    for(i <-1  to 9){
      for(j <- 1 to i){
//        println(s"${j}*${i}=${i*j}")
        printf("%d*%d=%-4d", j,i,i*j)
        /**
        * %d:占位符,会输出一个整数
        * %4d:占位符,会输出一个整数,一共占4个字符的空间大小,左对齐?
        * %4d:占位符,会输出一个整数,一共占4个字符的空间大小,右对齐?
        */
      }
      println()
    }
  }
}

输出如图

image.png

百鸡百钱问题

object E06 {
  def main(args: Array[String]): Unit = {
    // 百鸡百钱
    /**
     * 设公鸡x,母鸡y只,小鸡是100-x-y
     * 同时0 <= x <= 20.0<=y<=33
     *
     * 5x + 3y + (100-x-y)/3 = 100  (1)
     *
     * 暴力求解
     * 1.(0,0,100) 代入 (1)看看是否成立
     * 2.(0,1,99) 代入 (1)看看是否成立
     * ...
     * 2.(0,33,37) 代入 (1)看看是否成立
     */
    var k = 0
    for(x <- 1 to 20){
      for(y <- 1 to 33){
        val z = 100 - x - y
        // 代入(1)
        if(5*x + 3*y + z/3 == 100){
          k += 1
          println(k, x,y,z)
        }
      }
    }
  }

输出如图

image.png