【移动应用开发】Kotlin编程

目录

一、新建一个Android项目

1. 在该项目的包名下,新建main.kt文件并加入代码

1.1 变量d#(#为1-5)各为什么类型?

1.2 d2中的数值表示方法

二、将以下代码也添加到main函数中,并体会和思考

2.1 代码如下

 (1)name是什么数据类型? 

(2)打印函数println中的字符串,是什么表达式?

(3)运行截图

2.2 代码如下

(1)a是什么数据类型?    

(2)运行截图

2.3 代码如下

(1)此时运行会出现什么?为什么?

(2)运行截图

2.4 代码如下

(1) b是什么数据类型?

(2)val和var的区别?

(3)运行截图

2.5 代码如下

(1) ..和until的区别?

(2)运行截图

6.  代码如下

(1)列表、集合和映射的区别?

(2)运行截图

三、设计一个函数adder,支持复数的加法运算。然后在main函数中调用adder函数,并验证该函数是否能够正确完成复数的加法运算。

1. ComplexNumber.kt

2. main.kt

3. 简化函数adder之后的代码

4. 主函数

5. 测试结果

四、类、构造函数、继承、接口、循环和条件语句

1. Person类

2. PrintInfo接口

3. Course类

4. Student类

5. Main函数

6. 测试结果

五、心得体会


一、新建一个Android项目

1. 在该项目的包名下,新建main.kt文件并加入代码

图1 main.kt文件

运行结果截图

图2 运行结果截图

1.1 变量d#(#为1-5)各为什么类型?

d1:整数类型(Int); d2:浮点数类型(Float);

d3:双精度浮点数类型(Double); d4 布尔类型(Boolean);

d5:字符串类型(String)。

1.2 d2中的数值表示方法

在 Kotlin 中,使用 f 后缀可以将整数直接转换为浮点数。

这样就可以将整数值 10 赋给浮点数变量 d2。


二、将以下代码也添加到main函数中,并体会和思考

2.1 代码如下

val name = "Lily"
      
println("Hello $name !")

 (1)name是什么数据类型? 

 字符串(String)

(2)打印函数println中的字符串,是什么表达式?

字符串模板,在 Kotlin 中,使用 $ 符号可以在双引号内插入变量的值,并将其替换为实际的值。

(3)运行截图

图3 题目2-1运行截图

2.2 代码如下

val a = 1  

println("a = $a")

(1)a是什么数据类型?    

        整数类型(Int)

(2)运行截图

图4 题目2-2运行截图

2.3 代码如下

a = 20

(1)此时运行会出现什么?为什么?

运行会报错。使用 val关键字声明的变量是不可变的,一旦被赋值后就不能再次修改。因此被val声明的a无法再次被赋值为20

(2)运行截图

图5 题目2-3运行截图

2.4 代码如下

var b = 10f
             
println("b = $b")
             
b = 20F
            
println("b = $b")

(1) b是什么数据类型?

        浮点数(float)

(2)val和var的区别?

val声明的是常量,不可再次赋值;

var声明的是变量,值可以变化。

(3)运行截图

图6 题目2-4运行截图

2.5 代码如下

println("${0..10}")
        
println("${0 until 10}")

(1) ..和until的区别?

① 相同点都是表示一个区间

② 不同点是0..10表示创建一个两端都为闭区间的区间,相当于[0,10];

0 until 10表示创建一个左闭右开的区间,相当于[0,10) 。  

(2)运行截图

图7 题目2-5运行截图

6.  代码如下

val friends = listOf("Tom", "Tom", "Lily")

val fruits = setOf("apple", "banana", "orange", "apple")

val prices = mapOf("apple" to 1, "banana" to 2, "orange" to 3.0)

println(friends)  

println(fruits)  

println(prices)

(1)列表、集合和映射的区别?

① 列表(List):是一个有序集合,可以包含重复元素。在 Kotlin 中,列表使用 listOf() 或者 mutableListOf() 来创建,可以通过索引访问元素,也可以进行添加、删除和遍历等操作。

② 集合(Set):是一个不包含重复元素的无序集合。在 Kotlin 中,集合使用 setOf() 或者 mutableSetOf() 来创建,不支持通过索引访问元素,但可以进行添加、删除和遍历等操作。

③ 映射(Map):是由键值对组成的集合,每个键都唯一对应一个值。在 Kotlin 中,映射使用 mapOf() 或者 mutableMapOf() 来创建,可以通过键来访问值,也可以进行添加、删除和遍历等操作                                                                                                                                                                                                                                                                                                                                                                                                        

(2)运行截图

图8 题目2-6运行截图


三、设计一个函数adder,支持复数的加法运算。然后在main函数中调用adder函数,并验证该函数是否能够正确完成复数的加法运算。

1. ComplexNumber.kt

package com.example.androidtest

class ComplexNumber(var real: Float, var imaginary: Float)

2. main.kt

fun adder(d1: ComplexNumber, d2: ComplexNumber): ComplexNumber {
    var sum = ComplexNumber(1.0f, 1.0f)
    sum.real = d1.real + d2.real
    sum.imaginary = d1.imaginary + d2.imaginary
    return sum
}

3. 简化函数adder之后的代码

fun adder(d1: ComplexNumber, d2: ComplexNumber) =
    ComplexNumber(d1.real + d2.real, d1.imaginary + d2.imaginary)

4. 主函数

val complex1 = ComplexNumber(2.0f, 3.0f)
val complex2 = ComplexNumber(5.0f, 6.0f)

val result = adder(complex1, complex2)

println("Sum = ${result.real} + ${result.imaginary}i")

5. 测试结果

图9 adder函数完成复数加法运算截图


四、类、构造函数、继承、接口、循环和条件语句

1. Person类

package com.example.androidtest

//定义一个Person类
open class Person(
    protected val name: String,
    protected val age: Int,
    protected val gender: String
) {
    init {
        checkGender(gender)
    }

    //检查性别填写规则,只允许小写字母
    private fun checkGender(gender: String) {
        if (gender.lowercase() !in listOf("female", "male")) {
            println("Gender should be only female of male!")
        }
    }

}

2. PrintInfo接口

package com.example.androidtest

//定义一个PrintInfo接口
interface PrintInfo {
    // 1. 打印基本信息
    fun printBasicInfo(){

    }
    // 2. 打印课程分数
    fun printScores(){

    }
}

3. Course类

package com.example.androidtest

//定义一个课程类
data class Course(val title: String, val score: Float)

4. Student类

package com.example.androidtest

/* 1.继承Person类(三个字段也要继承)
*  2.继承接口PrintInfo(方法需要重写)
*  3.添加自己本身的字段
* */
class Student(
    name: String,
    age: Int,
    gender: String,
    val sno: Int,
    val major: String,
    val grade: Int,
    val scores: ArrayList<Course>
) : Person(name, age, gender), PrintInfo {
    

override fun printBasicInfo() {
        super.printBasicInfo()
        println("学生姓名:$name")
        println("年龄:$age")
        println("性别:$gender")
        println("学号:$sno")
        println("专业名称:$major")
        println("年级:$grade")
    }

    override fun printScores() {
        super.printScores()
        println("课程分数如下:")
        for (course in scores) {
            println("${course.title} = ${course.score}")
        }
    }
}

5. Main函数

val scores = {
    val l = ArrayList<Course>()
    l.add(Course("JavaWeb程序设计", 93f))
    l.add(Course("数据库原理", 92f))
    l.add(Course("人工智能", 95f))
    l
}
val p = Student(
    name = "小煊", age = 20, gender = "female", sno = 2130502441,
    major = "计算机科学与技术", grade = 2021,
    scores = scores()
)
p.printBasicInfo()
p.printScores()

6. 测试结果

图10 学生信息运行截图


五、心得体会

1. 对Kotlin编程有了更深刻的理解。虽然Kotlin有些语法和Java是差不多的,但细节上还是有出入。掌握了一些基础语法,比如常用的数据类型、var和val声明变量的区别、..和until的区别、以及列表、集合和映射的区别

2. 在做面向对象编程的时候,我学习了如何在 Kotlin 中定义类、创建对象,以及使用面向对象的特性,如封装、继承和多态。这使我能够更好地组织和管理代码,提高代码重用性和可维护性。理解了Kotlin 中的类默认是不可被继承的,如果要指定某个类可以被其他类继承,需要使用 open 关键字来明确指定该类是可继承的;如果子类希望重写父类的方法,需要在父类方法前加open关键字,并在子类中使用 override 关键字来表示该方法是被覆盖的等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值