Kotlin基本语法练习第一章

Kotlin基本语法训练

/*
* create by WuZhouXing
* on 2020/5/9 16:01
*  在 Kotlin 中,所有东西都是对象 $ 用来调用对象 变量 函数 和类
* 在这个意义上讲我们可以在任何变量上调用成员函数与属性
*  ${} 函数、对象、或者表达式
*/

//顶层变量:
val propertyParams = 3.14
var x = 0

//表达式作为函数体 自动推导返回值类型
fun sum(a: Int, b: Int) = a + b

//1.条件表达式
fun maxOf(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}

//2.if也可用作表达式
fun maxOf1(a: Int, b: Int) = if (a > b) a else b

//3.空值与 null 检测
fun parseInt(str: String): Int? {
    //
    return str.toIntOrNull()
}

fun printProduct(arg1: String, arg2: String) {
    val x = parseInt(arg1)
    val y = parseInt(arg2)
    if (x != null && y != null) {
        println(x * y)
    } else {
        println("'$arg1' or '$arg2' is not a number")
    }
}

/*
*4.类型检测与自动类型转换
* is 运算符检测一个表达式是否某类型的一个实例
* !is 表示不是指定类型
* ? 或者为空
* */
fun getStringlength(obj: Any): Int? {
    if (obj is String) {
        return obj.length
    }
    return null
}

fun getStringlength1(obj: Any): Int? {
    // `obj` 在 `&&` 右边自动转换成 `String` 类型
    if (obj is String && obj.length > 0) {
        return obj.length
    }
    return null
}


fun describe(obj: Any): String =
        when (obj) {
            1 -> "One"
            "Hello" -> "Greeting"
            is Long -> "Long"
            !is String -> "Not a String"
            else -> "UnKnown"
        }
//       我们可以用任意表达式(而不只是常量)作为分支条件
       when{
			  rotationDegrees==0&&!mirrored->ExifInterface.ORIENTATION_NORMAL
			  rotationDegrees==0&&!mirrored->ExifInterface.ORIENTATION_FLIP_HORIZONTAL
			  else -> ExifInterface.ORIENTATION_UNDEFINED
			}


fun main() {
    println("Hello World!")
    println(sum(3, 5))
    //变量
//只读局部变量
    val a: Int = 1
    val b = 3  //自动推断数据类型

//可重新赋值
    var x = 5
    x += 1

    var temp = 1

// 模板中的简单名称: 和python类似
    var s1 = "a is $a"
    temp = 2
    println(s1)

    val s2 = "${s1.replace("is", "was")}, but now is $temp"
    println(s2)
    println("a+b=${a + b}")

    //调用
    println("max of 0 and 42 is ${maxOf1(0, 42)}")

    printProduct("6", "8")
    printProduct("a", "d")

    /*
    *  @author  wuzhouxing  2020/5/9 16:58
    *  @description for循环
    */
    println("---------------------for------------------")
    val items = listOf("Apple", "banana", "kiwifruit")

    for (index in items.indices) {
        println("item at $index is ${items[index]}")
    }
    //or
    for (item in items) {
        println(item)
    }

    /*
    *  @author  wuzhouxing  2020/5/9 17:02
    *  @description while循环
    */
    println("---------------------while------------------")
    var index = 0;
    while (index < items.size) {
        println("item at $index is ${items[index]}")
        index++
    }

    index = 0
    do {
        println("item at $index is ${items[index]}")
        index++
    } while (index < items.size)

    println("---------------------when else------------------")
    println(describe(3))
    println(describe("3"))
    println(describe(1))
    println(describe(1L))
    println("---------------------使用区间(range)------------------")
    /*
    *  @author  wuzhouxing  2020/5/9 17:25
    *  @description 使用 in 运算符来检测某个数字是否在指定区间内:
    */
    val m=19
    val w=19
    if(m in 1..w+3){
        println("fits in range")
    }
    println("区间迭代:")
    for (x in 1..5){
        print(x)
    }
    println()
    println("数列迭代")
    for(x in 1..9 step 4){
        print(x)
    }
    println()
    for(x in 9 downTo 0 step 3){
        print(x)
    }

    println("---------------------创建基本类及其实例------------------")
    val rectangle=Rectangle(5.0,2.0)
    val triangle=Triangle(3.0,4.0,5.0)
    println("Area of rectangle ${rectangle.caclulateArea()},its perimeter is ${rectangle.perimeter}")
    println("Area of triangle ${triangle.caclulateArea()},its perimeter is ${triangle.perimeter}")

}

abstract class Shape(val sides: List<Double>){
    val perimeter:Double get()=sides.sum()
    abstract fun caclulateArea():Double
}

interface RectangleProperties{
    val isSquare:Boolean
}

class Rectangle(var height:Double,var length:Double):Shape(listOf(height,length,height,length)),RectangleProperties{
    override fun caclulateArea(): Double {
      return  height*length
    }

    override val isSquare: Boolean
        get() =length==height

}

class Triangle(var sideA:Double,var sideB:Double,var sideC:Double):Shape(listOf(sideA,sideB,sideC)){
    override fun caclulateArea(): Double {
        val s=perimeter/2
        return Math.sqrt(s*(s-sideA)*(s-sideB)*(s-sideC))
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值