内建控制-循环语句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
相关推荐
深兰科技2 天前
廊坊市市长刘媛率队到访深兰科技,推动机器人制造基地与产业投资落地
人工智能·科技·机器人·scala·symfony·深兰科技·廊坊市市长刘媛
萧霍6 天前
判断两个对象是相等的
scala
程序员小羊!8 天前
Flink(用Scala版本写Word Count 出现假报错情况解决方案)假报错,一直显示红色报错
flink·word·scala
173111 天前
scala中访问控制与方法重写
scala
张较瘦_13 天前
[论文阅读] 从 5MB 到 1.6GB 数据:Java/Scala/Python 在 Spark 中的性能表现全解析
java·python·scala
还是大剑师兰特18 天前
Scala面试题及详细答案100道(81-90)-- 框架与生态
scala·大剑师·scala面试题
孤岛奇兵常凯申19 天前
Scala中的高阶函数(一)
scala
盛小夏20 天前
用 Python 把汉诺塔玩成“魔法”:从递归到可视化,一篇就够!
scala
智海观潮23 天前
学好Spark必须要掌握的Scala技术点
大数据·spark·scala
盛小夏24 天前
用链式风格写代码,就像在搭积木
scala