大創項目個人周報(2024.7.15—2024.7.21)
本周個人情況匯報
一、搭建開發環境
1.下載Android Studio

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 這是拼接的值"http://$為模版表達式,可以直接將后面跟著的變量或表達式以字符串形式替換到這個位置
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()方法。
接下來,我們定義了兩個子類:Dog和Fish。Dog類繼承自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.
通過這個示例,我們可以看到繼承和接口實現的區別:
- 繼承允許子類繼承父類的屬性和方法,并且可以重寫父類的方法。在示例中,
Dog和Fish類繼承了Animal類的name屬性和makeSound()方法,并且分別重寫了makeSound()方法。 - 接口實現允許類實現接口中定義的方法。在示例中,
Dog和Fish類都實現了Swimmer接口的swim()方法。
綜上所述,繼承用于類與類之間的層次結構和代碼重用,而接口實現用于類與接口之間的行為規范和多態性。
下周計劃
- 繼續學習Kotlin語言,學習Lambda編程
- 利用Kotlin實現CS架構
浙公網安備 33010602011771號