代码及解释如下
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
}
}
}