scala练习:依据输入的年和月打印该月日历

代码及解释如下

import scala.io.StdIn.readLine

object Hello {
  def main(args: Array[String]): Unit = {
    println("请输入年份 ")
    val year = readInt()
    println("请输入月份 ")
    val month = readInt()

    //调用判断是否闰年
    println(isLeapYear(year))
    //判断月的天数
    println(getDaysofMonth(year, month))
    //从1900年1月1日到现在的天数
    println(dayfrom1900(year))
    println(dayofYear(year, month))
    println(dayofWeek(year, month))
    printCal(year, month)
  }

  //判断是否闰年,scala讲究优雅
  def isLeapYear(year: Int): Boolean = {
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) true else false
  }

  //获取月份天数
  def getDaysofMonth(year: Int, month: Int): Int = {
    val arr1 = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    val arr2 = Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    if (isLeapYear(year)) arr1(month - 1) else arr2(month - 1)
  }

  //用循环计算输入的年份距离1900年1月1日的天数
  //比如指定2020年,指的是19000101到20191231的天数
  def dayfrom1900(year: Int): Int = {
    var totalDays = 0
    for (i <- 1990 until year) {
      if (isLeapYear(year)) totalDays += 366 else totalDays += 365
    }
    totalDays
  }


  //计算是今年的第几天
  //比如指定11月,计算1月1日到11月31日的天数
  def dayofYear(year: Int, month: Int): Int = {
    var sum = 0
    for (i <- 1 until month) {
      sum += getDaysofMonth(year, i)
    }
    sum
  }

  //求该月第一天是星期几
  def dayofWeek(year: Int, month: Int): Int = {
    //前提:1900年1月1日是周一,这个规定1900年一月一日第一天
    val s = dayofYear(year, month) + dayfrom1900(year)
    //要计算月的第一天是周几,应该获取上个月奖惩1900年1月1日有多少天,然后+1. 因为求的是每个月第一天是星期几
    //余数1代表星期1 余数0代表星期日
    val weekDay = (s + 1) % 7
    weekDay
  }

  def printCal(year: Int, month: Int): Unit = {
    var count = 0
    var week = dayofWeek(year, month)
    println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六")
    //打印空格
    for (i <- 0 until week) {
      count += 1
      print("\t" + "\t")
    }
    // 打印天
    for (i <- 1 to getDaysofMonth(year, month)) {
      count += 1
      print(i + "\t" + "\t")
      if (count % 7 == 0) println
    }
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值