大创项目个人周报(2024.7.15—2024.7.21)

本周个人情况汇报

一、搭建开发环境

1.下载Android Studio
1
2.运行第一个程序
2

二、入门Kotlin语言

1.打印语句的操作,用println()函数

fun main() {
    println("Hello World!")
}

2.变量的定义:在Kotlin中定义变量只有以如下两种方式定义

var [变量名称] : [数据类型]
val [变量名称] : [数据类型]
  • val用来声明一个不可变的变量,var用来声明一个可变的变量。
  • Kotlin编译器会自动根据变量所赋的值推导出变量自身的类型
  • 对于要延迟赋值的变量,可以显式声明其类型,如:
var a : Int = 10

3.数字类型的变量

类型 最大值 最小值
Byte 8 -128 127
Short 16 -32768 32767
Int 32 -2,147,483,648 (-2^31 ) 2,147,483,647(2^31 - 1)
Long 64 -9,223,372,036,854,775,808 (-2^63) 9,223,372,036,854,775,807(2^63-1)
  • 除了整数类型外,Kotlin还为无符号整数提供以下类型:

UByte:一个无符号8位整数,范围从0到255
UShort:无符号16位整数,范围从0到65535
UInt:一个无符号32位整数,范围从0到2^32 - 1
ULong:一个无符号64位整数,范围从0到2^64 - 1

  • 要注意的是,在Long类型与无符号类型里,定义的数字后面要加上如L、UL、U来区分
类型 大小(位) 符号与尾数位数 阶码位数 小数位数
Float 32 24 8 6-7
Double 64 53 11 15-16
  • 数字类型变量的计算 有 + - * / % ++ -- += -= *= /= %=
    等,悉如C语言。整数的位运算操作,可以直接在二进制层面上与数字表示的位进行操作,不过只适用于Int和Long类型的数据:

shl(bits)– 有符号左移
shr(bits)– 有符号右移
ushr(bits)– 无符号右移
and(bits)– 按位与
or(bits)– 按位或
xor(bits)– 按位异或
inv()– 取反

4.字符串类型
Kotlin中的字符串,有专门的类型,其操作较之C语言更加方便。

  • 可以在字符串里储存多行的字符
val text = "Hello\nWorld"
val text = """
            Hello
            hello
            World
            """
  • 可以将字符串拼接使用
    val s1 = "Hello"
    val s2 = "World!"
    val str = s1 + s2//字符串与字符串拼接

    val a = 10
    val text = "这是拼接的值" + a//字符串与其他类型拼接,但只能被拼接的类型在后
    
    val text = "这是拼接的值$a"
    val text = "$a 这是拼接的值"//$为模版表达式,可以直接将后面跟着的变量或表达式以字符串形式替换到这个位置
    val text = "${a}这是拼接的值"

5.流程控制

  • if条件语句
if (条件判断) 判断成功执行的代码;

Kotlin中的if语句是可以有返回值的,故可做如下操作

val value == if(num1 > num2){
    num1
}
else{
    num2
}
  • when语句
    when定义具有多个分支的条件表达式。类似C语言中的switch语句,作如下形式:
when (条件) {
    匹配值1 -> 代码...   
    匹配值2 -> 代码...   
    else -> {
        代码...    
    }
}
  • for循环
fun main() {
    for (i in 1..3)  {
        println("666")
    }
    for (i in 0 until 10 step 2)  {
        println("666")
    }

    for (i in 0 downTo 10 step 2)  {
        println("666")
    }
}
  • while循环
    大致与C语言相同

三、函数

函数形式如下,可以以Unit作返回值类型作无返回值函数,也可以定义递归函数。

fun 函数名称([函数参数...]): 返回值类型 {
    //函数体
}

在函数内部也可以定义函数

四、类

在Kotlin中,可以定义一个类,然后进一步创建许多这个类的实例对象。可以定义如下:

class Person {
    var name = ""
    var age = 0
    fun eat(){
        println(name + " is eating.He is " + age + " years old.")
    }
}

对对象的操作:

fun main(){
    val p = Person()
    p.name="Jack"
    p.age=19
    p.eat()
}

本周遇到的问题及利用chatGPT等AI工具的解决过程

在本周的学习中,学习类时对不同类的定义方法不太分得清楚,故利用AI解答。
Q:在Kotlin语言中,类的定义可以如何定义?请给出具体的不同的定义方法
A:在Kotlin语言中,类的定义可以通过以下几种方式进行定义:

1. 基本类定义

class MyClass {
    // 类的成员变量、方法等定义
}

这是最基本的类定义方式,其中MyClass是类的名称。

2. 带有构造函数的类定义

class MyClass constructor(param1: Type1, param2: Type2) {
    // 类的成员变量、方法等定义
}

在构造函数中声明了参数,可以根据需要指定参数的类型。

另一种简化的方式是使用constructor关键字可以省略:

class MyClass(param1: Type1, param2: Type2) {
    // 类的成员变量、方法等定义
}

3. 带有初始化块的类定义

class MyClass {
    init {
        // 初始化块中的代码
    }

    // 类的成员变量、方法等定义
}

初始化块中的代码会在类的实例化过程中执行,用于初始化类的成员变量等操作。

4. 带有继承的类定义

open class ParentClass {
    // 父类的成员变量、方法等定义
}

class ChildClass : ParentClass() {
    // 子类的成员变量、方法等定义
}

ChildClass继承自ParentClass,通过冒号(:)来实现继承关系。

5. 带有接口实现的类定义

interface MyInterface {
    // 接口定义
}

class MyClass : MyInterface {
    // 类的成员变量、方法等定义
}

MyClass实现了MyInterface接口,通过冒号(:)来实现接口的实现关系。

这些是Kotlin中类的几种定义方式,可以根据需求选择适合的方式进行类的定义。
Q:可以通过具体的实例演示一下后两种定义的方式吗?可以就实例说明一下它们的区别吗?
A:当然可以!我将为你提供一个具体的示例来说明继承和接口实现的区别。

open class Animal(val name: String) {
    open fun makeSound() {
        println("$name makes a sound.")
    }
}

interface Swimmer {
    fun swim()
}

class Dog(name: String) : Animal(name), Swimmer {
    override fun makeSound() {
        println("$name barks.")
    }

    override fun swim() {
        println("$name swims.")
    }
}

class Fish(name: String) : Animal(name), Swimmer {
    override fun makeSound() {
        println("$name doesn't make a sound.")
    }

    override fun swim() {
        println("$name swims.")
    }
}

在上面的示例中,我们定义了一个Animal类作为父类,它有一个name属性和一个makeSound()方法。然后我们定义了一个Swimmer接口,其中包含一个swim()方法。

接下来,我们定义了两个子类:DogFishDog类继承自Animal类并实现了Swimmer接口,Fish类也继承自Animal类并实现了Swimmer接口。

Dog类和Fish类中,它们都重写了makeSound()方法,并且Dog类实现了swim()方法,而Fish类也实现了swim()方法。

现在我们来看看如何使用这些类:

fun main() {
    val dog = Dog("Buddy")
    dog.makeSound() // Output: Buddy barks.
    dog.swim() // Output: Buddy swims.

    val fish = Fish("Nemo")
    fish.makeSound() // Output: Nemo doesn't make a sound.
    fish.swim() // Output: Nemo swims.
}

main()函数中,我们创建了一个Dog对象和一个Fish对象,并分别调用它们的方法。

输出结果如下:

Buddy barks.
Buddy swims.
Nemo doesn't make a sound.
Nemo swims.

通过这个示例,我们可以看到继承和接口实现的区别:

  • 继承允许子类继承父类的属性和方法,并且可以重写父类的方法。在示例中,DogFish类继承了Animal类的name属性和makeSound()方法,并且分别重写了makeSound()方法。
  • 接口实现允许类实现接口中定义的方法。在示例中,DogFish类都实现了Swimmer接口的swim()方法。

综上所述,继承用于类与类之间的层次结构和代码重用,而接口实现用于类与接口之间的行为规范和多态性。

下周计划

  1. 继续学习Kotlin语言,学习Lambda编程
  2. 利用Kotlin实现CS架构
posted @ 2024-07-21 16:51  20231302邱之钊  阅读(1)  评论(0编辑  收藏  举报