内建控制-循环语句while

一. while循环

练习

问题:如何把"i miss you "重复输出3000次?

css 复制代码
object base19 {
  def main(args: Array[String]): Unit = {
    // 把 I miss you 重复输出 3000次
    // while 循环的基本格式
/*

    var i = 0 // 循环变量,控制重复的次数
    while (条件){
      循环体
      i += 1
    }
*/

    var i = 1
    while (i <= 3000){
      println(s"${i}. I miss you")
      i += 1
    }
  }
}

问题:输出1~100内的奇数,每个一行

scss 复制代码
object base20 {
  def main(args: Array[String]): Unit = {
    // 把 1,2,3,4,5,...100 中的奇数输出
    var i = 1
    
    方法一:
    
    while(i<=100){
        println(i) // println重复了100次
      i += 2
    }
    
    方法二:
    while(i<=100){
      if (i % 2 != 0) {
        println(i) // println重复了100次
      }
      i += 1
    }
  }
}

问题:求1-100的和

ini 复制代码
object base21 {
  def main(args: Array[String]): Unit = {
    // 1 + 2 + 3 + 4 + 5 + ...... + 100 的结果
    // 等差数列: (100+1) * 100 / 2 = 5050
    var sum = 0
    var i = 1
    while (i<=100){
      sum = sum + i
      i += 1
    }
    println(s"sum=${sum}")
  }
}

问题:求 1-100 的奇数和

less 复制代码
object base21 {
  def main(args: Array[String]): Unit = {
    // 1 + 2 + 3 + 4 + 5 + ...... + 100 的结果
    // 等差数列: (100+1) * 100 / 2 = 5050
    // 求 1-100 的奇数和
    
    方法一:
    var sum = 0
    var i = 1
    while (i<=100){
      sum = sum + i
      i += 2
    }
    println(s"sum=${sum}")
    
    方法二:
    var sum = 0
    var i = 1
    while (i<=100){
      if(i%2 == 1){
      sum = sum + i
      i += 2
    }
    }
    println(s"sum=${sum}")
  }
}

问题:求 1 + 1/2 + 1/3 + 1/4 + 1/5 + .... + 1/100 的和

ini 复制代码
object practice03 {
  def main(args: Array[String]): Unit = {
    // 求 1 + 1/2 + 1/3 + 1/4 + 1/5 + .... + 1/100 的和
    var sum:Double = 0
    var i = 1
    while (i<=100){
      sum = sum + 1.0 / i   // 1/2 = 0
      i += 1
    }
    println(s"sum=${sum}")
  }
}

注意:Int与Double的数据类型不同,Int + Double是错误点,应该sum:Double,转换成同一数据类型。

二. while死循环

作用:在需要一直执行的时候,就可以使用死循环。

例如:

不停地判断用户的输入的内容是否是闰年

kotlin 复制代码
object base {
  def main(args: Array[String]): Unit = {
    while (true){
      print("请输入要判断的年份(输入 0 就结束判断):")
      // 判断用户输入的年份,是否为闰年
      val year = scala.io.StdIn.readInt()
      if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
        println(s"${year} 是闰年")
      } else {
        println(s"${year} 不是闰年")
      }
    }
  }
}

三. break、

实现方式:

Scala 对 break 的实现方式与传统命令式语言有所不同:

Scala 并没有将 break 作为关键字,而是通过 scala.util.control.Breaks 类提供的工具方法来实现 需要配合 breakable 代码块使用,break 只能在 breakable 块中生效

注意:scala中没有现成的break关键字,而是使用面向对象的方式来代替,底层会抛出异常来跳出循环,外层捕获异常

例如:

问题:输入年份,判断其是否为闰年,并输出判断结果,程序可以终止循环并退出

kotlin 复制代码
import scala.util.control.Breaks.{break, breakable}

object base22 {
  def main(args: Array[String]): Unit = {
    breakable{
    while (true){
      print("请输入要判断的年份(输入 0 就结束判断):")
      // 判断用户输入的年份,是否为闰年
      val year = scala.io.StdIn.readInt()

      if (year == 0){
        // 结束循环
        break
      }

      if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
        println(s"${year} 是闰年")
      } else {
        println(s"${year} 不是闰年")
      }
    }
    }
    println("死循环结束了.... 系统退出")
  }
}

注意: 使用 while(true) 实现无限循环, 利用 scala.util.control.Breaks 中的 breakbreakable 实现循环终止

四. do while循环

less 复制代码
object base23 {
  def main(args: Array[String]): Unit = {
    // do while: 无论条件是否成立,都会执行一次!
    // while: 如果条件不成立,不会执行!

/*    var i = 100
    do{
      println(i)
      i += 1
    } while (i<=10)*/

    var i = 100
    while (i<=10){
      println(i)
      i += 1
    }
  }
}
ini 复制代码
object base24 {
  def main(args: Array[String]): Unit = {
    var i = 0
    var money = 1.0
    /*
    while (i < 20){
      money = money * 1.1
      i = i + 1
    }
    println(s"第${i} 年结束时,有 ${money} 元")
*/
    while (money < 1000) {
      // while(i < 20){
      money = money * 1.8
      // i = i + 1
    }
    println(s"第${i} 年结束时,有 ${money} 元")
  }
}
  // 本金 1 ---- 能力增长 10% ------ 时间 73 ------- 1051
  // 本金 10 ---- 能力增长 10% ------ 时间 73 ------- 1051
  // 本金 1 ---- 能力增长 80% ------ 时间 12 ------- 1051
相关推荐
abcy0712139 天前
scala playframework 搭建与新建controller教程
scala
lpfasd12310 天前
编程语言榜单变迁分析
开发语言·后端·scala
戮漠summer1 个月前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
醉熏的石头1 个月前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
Irene19911 个月前
Scala、Java、Python、JavaScript 的核心特性和应用场景(Python 的“单机“局限性:GIL 机制导致的多核并行缺陷)
java·javascript·python·scala
李白的天不白2 个月前
确认 Nginx 配置文件是否真的生效
scala
醉颜凉2 个月前
Scala自定义Monad实战:从理论到应用的完整指南
大数据·算法·scala
那晚的她2 个月前
Scala中Set集合
开发语言·后端·scala
IvanCodes2 个月前
二、Scala流程控制:分支与循环
大数据·scala
Veggie262 个月前
【Scala PyTorch深度学习】PyTorch On Scala系列课程 第十四章 29 PyTorch模型扩展自定义Module【AI Infra3】[PyTorch Scala硕士研一课程】
人工智能·深度学习·scala