From f27e286f7e8b1a6711cbd18b7b3353dd56da986d Mon Sep 17 00:00:00 2001 From: kennethcheng Date: Wed, 9 Sep 2026 17:28:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BA=BF=E4=B8=8B=E8=AF=BE=EF=BC=9A=20?= =?UTF-8?q?1=E3=80=81=E5=8F=98=E9=87=8F=E5=92=8C=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=202=E3=80=81=E8=BF=90=E7=AE=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ChatGPT Scala 第 1 课: 变量、类型、条件判断 --- .gitignore | 39 +++++++++++++++ .idea/.gitignore | 10 ++++ pom.xml | 17 +++++++ src/main/scala/demo1/DemoVar.scala | 32 +++++++++++++ src/main/scala/demo2/DemoStr.scala | 29 +++++++++++ src/main/scala/demo2/DemoVar2.scala | 48 +++++++++++++++++++ src/main/scala/practise1/Demo1VarAndVal.scala | 22 +++++++++ src/main/scala/practise1/Demo2Type.scala | 37 ++++++++++++++ .../practise1/Demo3StringInterpolation.scala | 16 +++++++ src/main/scala/practise1/Demo4If.scala | 27 +++++++++++ src/main/scala/practise1/Overall.scala | 34 +++++++++++++ src/main/scala/practise1/Practise1.scala | 21 ++++++++ src/main/scala/practise1/Practise2.scala | 24 ++++++++++ src/main/scala/practise1/Practise3.scala | 26 ++++++++++ src/main/scala/practise1/Practise4.scala | 47 ++++++++++++++++++ 15 files changed, 429 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 pom.xml create mode 100644 src/main/scala/demo1/DemoVar.scala create mode 100644 src/main/scala/demo2/DemoStr.scala create mode 100644 src/main/scala/demo2/DemoVar2.scala create mode 100644 src/main/scala/practise1/Demo1VarAndVal.scala create mode 100644 src/main/scala/practise1/Demo2Type.scala create mode 100644 src/main/scala/practise1/Demo3StringInterpolation.scala create mode 100644 src/main/scala/practise1/Demo4If.scala create mode 100644 src/main/scala/practise1/Overall.scala create mode 100644 src/main/scala/practise1/Practise1.scala create mode 100644 src/main/scala/practise1/Practise2.scala create mode 100644 src/main/scala/practise1/Practise3.scala create mode 100644 src/main/scala/practise1/Practise4.scala diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..480bdf5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +.kotlin + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..f6906f2 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 已忽略包含查询文件的默认文件夹 +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..3d97671 --- /dev/null +++ b/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + org.example + scala_20260908 + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + \ No newline at end of file diff --git a/src/main/scala/demo1/DemoVar.scala b/src/main/scala/demo1/DemoVar.scala new file mode 100644 index 0000000..816429e --- /dev/null +++ b/src/main/scala/demo1/DemoVar.scala @@ -0,0 +1,32 @@ +package demo1 + +object DemoVar { + def main(args: Array[String]): Unit = { + // 定义一个变量a,因为是用val定义,所以其实是个常量 + val a = 10 + // 常量不可以再修改值,所以x = 11会报错 + // x = 11 + + //定义一个变量y,因为用var定义,所以是个真的变量 + var b = 10 + b = 11 + + println(b) + + println("============================================================") + + case class people(var high: Int, var weight: Int) + + val xiaoMing = new people(170, 110) + + // xiaoMing = new people(173, 110) + // ❌ 因为 xiaoMing 是 val,不能让它重新指向另一个对象 + + xiaoMing.high = 173 + + println(xiaoMing) + println(xiaoMing.weight) + + + } +} diff --git a/src/main/scala/demo2/DemoStr.scala b/src/main/scala/demo2/DemoStr.scala new file mode 100644 index 0000000..32a20dd --- /dev/null +++ b/src/main/scala/demo2/DemoStr.scala @@ -0,0 +1,29 @@ +package demo2 + +object DemoStr { + def main(args: Array[String]): Unit = { + val name: String = "zhangsan" + val age: Int = 18 + + println(s"name=${name},age=${age}") + + println(name * 3) + + val duohang: String = + """ + |123 + |456 + |789 + |""".stripMargin + println(s"duohang = ${duohang}") + + val s1: String = "hello" + val s2: String = new String("hello") + + println(s1 == s2) // true scala中的==其实等于java中的equals + println(s1 != s2) + println(s1.equals(s2)) //true 其实等于java中的equals其实等于java中的equals + println(s1.eq(s2)) // false scala中的eq就是java中的==,比较两个对象的内存地址 + } + +} diff --git a/src/main/scala/demo2/DemoVar2.scala b/src/main/scala/demo2/DemoVar2.scala new file mode 100644 index 0000000..10a40fd --- /dev/null +++ b/src/main/scala/demo2/DemoVar2.scala @@ -0,0 +1,48 @@ +package demo2 + +object DemoVar2 { + def main(args: Array[String]): Unit = { + val a1: Byte = 10 + val b1: Long = 1234 + + println(s"a1的数据类型是 ${a1.getClass.getSimpleName}") + println(s"b1的数据类型是 ${b1.getClass.getSimpleName}") + + // 隐式转换 a1自动转成long类型与b1相加 + val result1 = a1 + b1 + println(s"result1的数据类型是 ${result1.getClass.getSimpleName}") + println(s"result1 = ${result1}") + + val a2: Byte = 10 + val b2: Int = a2 + //报错 无法隐式转换(大变小) + // val c2:Byte = b2 + val c2 = b2.toByte + + val b3: Int = 129 + val c3: Byte = b3.toByte + // c3 会等于129吗? 数值区间为 -128 到 127 + println(s"c3 = ${c3}") + + val a4: Byte = 10 + val b4: Char = 'b' + + // type mismatch; 虽然编译通过,但是运行报错 + // val c4: Byte = 64 + // println(s"c4=${c4}") + + val a5: Int = 97 + // Char隐式转换为Int + println(s"b4+a5 = ${b4 + a5}") + val b5: Char = a5.toChar + println(s"b5 = ${b5}") + + + val a6: Int = 10 + val b6: Float = a6 + val c6: Int = b6.toInt + println(s"b6 = ${b6}") + println(s"c6 = ${c6}") + + } +} \ No newline at end of file diff --git a/src/main/scala/practise1/Demo1VarAndVal.scala b/src/main/scala/practise1/Demo1VarAndVal.scala new file mode 100644 index 0000000..8de167e --- /dev/null +++ b/src/main/scala/practise1/Demo1VarAndVal.scala @@ -0,0 +1,22 @@ +package practise1 + +object Demo1VarAndVal { + def main(args: Array[String]): Unit = { + + //1. val 和 var + val name = "Kenneth" + // name = "Tom" // ❌ 不允许修改 + + var age = 25 + age = 26 // ✅ 可以修改 + println(name) + println(age) + + println("=================================") + + + + println("=================================") + } + +} diff --git a/src/main/scala/practise1/Demo2Type.scala b/src/main/scala/practise1/Demo2Type.scala new file mode 100644 index 0000000..e2fa4ac --- /dev/null +++ b/src/main/scala/practise1/Demo2Type.scala @@ -0,0 +1,37 @@ +package practise1 + +object Demo2Type { + def main(args: Array[String]): Unit = { + //2. 类型 + // + //Scala 支持自动推断类型: + + val name = "xiaoMing" // String + val age = 25 // Int + val price = 19.99 // Double + val flag = true // Boolean + + // 也可以明确指定: + val name2: String = "xiaoMing" + val age2: Int = 25 + val price2: Double = 19.99 + + //Scala 和 Java 很像,但 Scala 更倾向于让编译器帮你推断类型。 + println(name.getClass) + println(age.getClass) + println(price.getClass) + println(flag.getClass) + println(name2.getClass) + println(age2.getClass) + println(price2.getClass) + println("===================================") + println(name.getBytes().mkString(",")) + println("===================================") + println(age.isInstanceOf[Int]) + println(age.getClass) + println("===================================") + println(name.isInstanceOf[String]) + println(name.getClass) + } + +} diff --git a/src/main/scala/practise1/Demo3StringInterpolation.scala b/src/main/scala/practise1/Demo3StringInterpolation.scala new file mode 100644 index 0000000..b0c3ee3 --- /dev/null +++ b/src/main/scala/practise1/Demo3StringInterpolation.scala @@ -0,0 +1,16 @@ +package practise1 + +object Demo3StringInterpolation { + + // 这是 Scala 很常用的语法: + val name = "xiaoMing" + val age = 25 + + println(s"我的名字是 $name,今年 $age 岁") + + // 表达式需要使用 {} + val a = 10 + val b = 20 + + println(s"$a + $b = ${a + b}") +} diff --git a/src/main/scala/practise1/Demo4If.scala b/src/main/scala/practise1/Demo4If.scala new file mode 100644 index 0000000..e2928a2 --- /dev/null +++ b/src/main/scala/practise1/Demo4If.scala @@ -0,0 +1,27 @@ +package practise1 + +object Demo4If { + def main(args: Array[String]): Unit = { + + // Scala 的 if 和 Java 类似 + val age = 20 + + if(age >=18){ + println("成年人") + }else{ + println("未成年") + } + + // 但是 Scala 有一个非常重要的特点:if 本身就是一个表达式,可以返回值 + + + val result = if(age >= 18){ + "成年人" + }else{ + "未成年人" + } + + println(result) + } + +} diff --git a/src/main/scala/practise1/Overall.scala b/src/main/scala/practise1/Overall.scala new file mode 100644 index 0000000..8ebc929 --- /dev/null +++ b/src/main/scala/practise1/Overall.scala @@ -0,0 +1,34 @@ +package practise1 + +object Overall { + def main(args: Array[String]): Unit = { + /*第 1 课综合题 + + 写一个 Scala 程序: + 姓名:Tom + 年龄:22 + 成绩:85 + + 最终输出: + Tom,今年22岁 + 成绩:85 + 评价:良好*/ + + val name = "Tom" + val age = 22 + val score = 85 + + val evaluate = + if (score >= 90 ) "优秀" + else if (score >= 80) "良好" + else if (score >= 60) "及格" + else "不及格" + + println( + s""" + |${name},今年${age}岁 + |成绩:${score} + |评价:${evaluate}""".stripMargin) + } + +} diff --git a/src/main/scala/practise1/Practise1.scala b/src/main/scala/practise1/Practise1.scala new file mode 100644 index 0000000..85e2b52 --- /dev/null +++ b/src/main/scala/practise1/Practise1.scala @@ -0,0 +1,21 @@ +package practise1 + +object Practise1 { + def main(args: Array[String]): Unit = { +/* 练习 1:基本变量 + + 创建三个变量: + name = "Tom" + age = 20 + salary = 15000.5 + + 要求: + 输出:Tom今年20岁,工资是15000.5*/ + + val name = "Tom" + val age = 20 + val salary = 15000.5 + + println(s"${name}今年${age}岁,工资是${salary}") + } +} diff --git a/src/main/scala/practise1/Practise2.scala b/src/main/scala/practise1/Practise2.scala new file mode 100644 index 0000000..fb98184 --- /dev/null +++ b/src/main/scala/practise1/Practise2.scala @@ -0,0 +1,24 @@ +package practise1 + +object Practise2 { + def main(args: Array[String]): Unit = { + /* 练习 2:判断年龄 + + 定义: + val age = 22 + + 判断: + 18岁及以上:成年人 + 18岁以下:未成年人 + 要求使用 if...else。*/ + + val age = 22 + + if (age >= 18) { + print("成年人") + } else { + println("未成年人") + } + } + +} diff --git a/src/main/scala/practise1/Practise3.scala b/src/main/scala/practise1/Practise3.scala new file mode 100644 index 0000000..6c0f9f9 --- /dev/null +++ b/src/main/scala/practise1/Practise3.scala @@ -0,0 +1,26 @@ +package practise1 + +object Practise3 { + def main(args: Array[String]): Unit = { + /* 练习 3:计算两个数 + + 定义: + val a = 10 + val b = 20 + + 输出: + 10 + 20 = 30 + 10 - 20 = -10 + 10 * 20 = 200 + 10 / 20 = 0.5*/ + + val a = 10 + val b = 20 + + println(s"${a}+${b} = ${a + b}") + println(s"${a}-${b} = ${a - b}") + println(s"${a}*${b} = ${a * b}") + println(s"${a}/${b} = ${a.toDouble / b}") + } + +} diff --git a/src/main/scala/practise1/Practise4.scala b/src/main/scala/practise1/Practise4.scala new file mode 100644 index 0000000..d818c73 --- /dev/null +++ b/src/main/scala/practise1/Practise4.scala @@ -0,0 +1,47 @@ +package practise1 + +import scala.util.Random + +object Practise4 { + def main(args: Array[String]): Unit = { + /*练习 4:成绩判断 + + 定义: + val score = 85 + + 按照下面规则输出: + 90 ~ 100:优秀 + 80 ~ 89:良好 + 60 ~ 79:及格 + 0 ~ 59:不及格 + + 例如: + score = 85 + 输出: + 良好*/ + + val score = Random.nextInt(51) + 50 + println(s"score = ${score}") + + if (score >= 90 && score <= 100) { + println("优秀") + } else if (score >= 80 && score < 90) { + println("良好") + } else if (score >= 60 && score < 80) { + println("及格") + } else + println("不及格") + + // GPT优化 + if (score >= 90) { + println("优秀") + } else if (score >= 80) { + println("良好") + } else if (score >= 60) { + println("及格") + } else { + println("不及格") + } + } + +}