第一次使用kotlin去编写一个小程序(hello world除外),感觉还是很新颖的,就是对kotlin掌握地不太好,使用起来还是不太顺手。但是可以感觉到的是kotlin相比于Java简洁不少,现在很明显感觉到的就是for语句和when语句(Java中用switch语句)的写起来比Java简洁很多,方便快捷。使用kotlin真的可以提高效率啊。
这次编写的是万年历,陈轶老师布置的课外小练习,使用kotlin编写,控制台输出就可以,实现起来不是很难,就是我的算法还是太简单粗暴了,有很多需要改进的地方。我先在博客上把代码上传,稍后再写一个Java实现的代码,好作比对。
Kotlin实现
代码
/*
* 这是一个简陋的万年历,通过控制台输出
* 因为1900年1月1日是星期一,所以从这一天算起,
* 算法简单粗暴,并不是最好的解决方案
*/
packagepackage03
importjava.time.Month
importjava.util.*
var monthA = intArrayOf(,31,28,31,30,31,30,31,31,30,31,30,31)
//因为这里我还不知道怎么将数组用作函数参数,故直接将数组写作全局变量
//以后加以改进
fun main(args: Array){
val year:Int
val month:Int
val sc=Scanner(System.`in`)
print("请输入年份:")
year=sc.nextInt()
print("请输入月份:")
month=sc.nextInt()
println("一共有$")
Print(Day(HowMuchDay(year,month)),year,month)
}
fun IsLeapYear(year:Int):Boolean{//判断是不是闰年
if(year%4==&&year%100!=||year%400==)
returntrue
else
returnfalse
}
/*
//这是一个失败的尝试,因为计算天数有太多要考虑的因素,暂时还没有想出好的算法
//本来想用四年一闰来算的,后来发现1900年不是闰年,2000年却是闰年
fun HowMuchDay(year:Int,monthInt:Int):Int{
var centrey:Int
centrey=(year-N)/100
var howMuchDay=0
var leapYear=0
leapYear=(year-N)/4
for (i in 0..monthInt-1)
howMuchDay+=month[i]
howMuchDay=leapYear*1461+(year%4*365)+howMuchDay+centrey*36525
return howMuchDay
}
*/
//主要是计算在所要查看的年份月份前面的天数,以此来计算查看月份的1号是星期几
fun HowMuchDay(year: Int,month:Int):Int{
var howMuchDay=
for(i in1900until year){//简单粗暴地将每一年的天数相加
if(IsLeapYear(i))//算法还有待改进
howMuchDay+=366
else
howMuchDay+=365
}
if(IsLeapYear(year))//这一步别忘了,否则在输入是闰年,月份大于等于2月的时候会出错
monthA[2] =29
for(j in1until month) {
howMuchDay = monthA[j] + howMuchDay
}
returnhowMuchDay
}
//结合HowMuchDay()函数来计算查看月份的第一天是星期几,
//返回值是所输入月份的前一天的星期
fun Day(d:Int):Int{
//d表示所输入月份前面有多少天
//d2表示所输入月份前一天是星期几
var d2=d%7
returnd2
}
//打印日历,有挺多细节的,但是不难
fun Print(d2:Int,year: Int,month: Int){
var step=
if(IsLeapYear(year))//如果是闰年的话那么2月份是29天的
monthA[2]=29
println("一 二 三 四 五 六 日")
if(d2!=7)//如果上个月最后一天是星期天,那么不需要打印空格
for(i in1..d2) {//如果不是的话就需要在1号前面打印空格,要计算步数
print(" ")
step++
}
for(i in1..monthA[month]) {
if(step==7) {//如果打印了7步,也就是一周,那么换行,步数归零
println()
step =
}
if(i
print("$i ")//因为打印单数和双数占的位数不一样
else
print("$i ")
step++//别忘了这里也要计算步数
}
}
效果
Java实现
代码
效果
对比
根据上面两种语言的实现,很明显可以发现kotlin编写的代码要少很多,而且更加简洁。
领取专属 10元无门槛券
私享最新 技术干货