首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

kotlin-万年历

第一次使用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编写的代码要少很多,而且更加简洁。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180320G1R1K900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券