diff --git a/src/main/scala/chapter1/demo3/DemoOps.scala b/src/main/scala/chapter1/demo3/DemoOps.scala index 0d54cf0..8253042 100644 --- a/src/main/scala/chapter1/demo3/DemoOps.scala +++ b/src/main/scala/chapter1/demo3/DemoOps.scala @@ -46,7 +46,7 @@ object DemoOps { a &= 1 // a = a & 1 // 按位与 运算 a |= 1 // a = a | 1 // 按位或 运算 - a ^= 1 // a = a ^ 1 // 异或 运算 + a ^= 1 // a = a ^ 1 // 异或 运算 val b = 10 diff --git a/src/main/scala/chapter1/demo4/DemoProcessControl.scala b/src/main/scala/chapter1/demo4/DemoProcessControl.scala new file mode 100644 index 0000000..262a08f --- /dev/null +++ b/src/main/scala/chapter1/demo4/DemoProcessControl.scala @@ -0,0 +1,164 @@ +package chapter1.demo4 + +import scala.util.control.Breaks.{break, breakable} + +object DemoProcessControl { + def main(args: Array[String]): Unit = { + ifelse() +// whileLoop() +// forLoop() +// continueMethod() +// breakMethod() + } + + def ifelse(): Unit={ + val age = 19 + if(age >= 18){ + println("成年了") + }else{ + println("未成年") + } + if(age <=6){ + println("童年") + }else if (age < 18){ + println("青少年") + }else if (age < 40){ + println("青年/壮年") + }else{ + println("其他") + } + } + + + def whileLoop(): Unit = { + var i = 1 + println("循环开始") + while (i < 3) { + println(s"i = ${i}") + i += 1 + } + println("循环结束了") + + val b = 0 + // do部分代码,至少会执行一次 + do { + println(s"b=${b}") + } while (b > 0) + + + } + + def forLoop(): Unit = { + // 1. 范围遍历 + println("==== until ====") + for (i <- 0 until 3) { + println(s"i = ${i}") + } + + println("==== to ====") + for (i <- 0 to 3) { + println(s"i = ${i}") + } + + // 2. 集合遍历 + println("==== List ====") + for (i <- List(1, 2, 3)) { + println(s"list data: ${i}") + } + println("==== Array ====") + for (i <- Array(1, 2, 3)) { + println(s"Array data: ${i}") + } + + + // 3. 循环守卫 + println("==== 循环守卫 ====") + // for(i <- 0 until 10) { + // if(i!=5){ + // println(i) + // } + // } + for (i <- 0 until 10 if i != 5) { + println(i) + } + + // 4. 循环步长 + + println("==== 循环步长 ====") + for (i <- 0 until 10 by 2) { + println(i) + } + + + println("==== 循环步长-2 ====") + for (i <- 10 until 0 by -2) { + println(i) + } + + // 5. 循环嵌套 + println("==== 循环嵌套 ====") + for (i <- 1 to 3) { + for (j <- 1 to 3) { + println(s"i = ${i},j = ${j}") + } + } + + // 灵活的用法: + + println("==== 循环嵌套2 ====") + for (i <- 1 to 3; j <- 1 to 3) { + println(s"i = ${i},j = ${j}") + + } + + // 6. 循环中引入变量 + + println("==== 循环中引入变量 ====") + for (i <- 0 until 3) { + val j = 3 - i + println(s"i = ${i},j = ${j}") + } + + + println("==== 循环中引入变量2 ====") + for (i <- 0 until 3; j = 3 - i) { + println(s"i = ${i},j = ${j}") + } + + println("==== 循环中引入变量3 ====") + for { + i <- 0 until 3 + j = 3 - i + } { + println(s"i = ${i},j = ${j}") + } + + } + + def continueMethod(): Unit = { + println("continue") + for (i <- 1 to 10) { + breakable { + if (i == 5) { + println("跳过5") + break + } + println(s"i = $i") + } + } + } + + def breakMethod(): Unit = { + println("break") + breakable { + for (i <- 1 to 10) { + if (i == 5) { + println("跳过5") + break + } + println(s"i = $i") + } + } + } + +} diff --git a/src/main/scala/chapter1/exercises/LeapYearDetermination.scala b/src/main/scala/chapter1/exercises/LeapYearDetermination.scala new file mode 100644 index 0000000..247af58 --- /dev/null +++ b/src/main/scala/chapter1/exercises/LeapYearDetermination.scala @@ -0,0 +1,25 @@ +package chapter1.exercises + +import scala.io.StdIn + +object LeapYearDetermination { + def main(args: Array[String]): Unit = { + print("请输入年份:") + val year = StdIn.readInt() + println(s"输入的年份是 ${year}") + println(ifYear(year)) + + def ifYear(year:Int): String ={ + if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){ + "闰年" + }else{ + "不是闰年" + } + + } + + + + } + +} diff --git a/src/main/scala/chapter1/exercises/MultiplicationTable.scala b/src/main/scala/chapter1/exercises/MultiplicationTable.scala new file mode 100644 index 0000000..dd273aa --- /dev/null +++ b/src/main/scala/chapter1/exercises/MultiplicationTable.scala @@ -0,0 +1,22 @@ +package chapter1.exercises + +object MultiplicationTable { + def main(args: Array[String]): Unit = { + + for (i <- 1 to 9) { + for (j <- 1 to i) { + print(s"$j * $i = ${i * j} ") + } + println() + } + + for (i <- 1 to 9; j <- 1 to i) { + print(s"$j * $i = ${i * j} ") + + if (j == i) { + println() + } + } + + } +} \ No newline at end of file diff --git a/src/main/scala/chapter2/demo1/DemoMethod.scala b/src/main/scala/chapter2/demo1/DemoMethod.scala new file mode 100644 index 0000000..e2f8071 --- /dev/null +++ b/src/main/scala/chapter2/demo1/DemoMethod.scala @@ -0,0 +1,32 @@ +package chapter2.demo1 + +object DemoMethod { + def main(args: Array[String]): Unit = { + + // 函数 + def sayHello(name: String): Unit = { + println(s"hello,${name}") + } + + sayHello("zhangsan") // hello + // 通过类名去调用方法,等同于java中的静态方法。要求方法定义在object中 + DemoMethod.sayHello("zhangsan") // hello in object + // 创建对象,然后再去调用对象的 sayHello 方法,等同于java中的普通方法。 + val obj: DemoMethod = new DemoMethod() + obj.sayHello("zhangsan") // hello in class + + } + + // 伴生对象中的方法,等同于java的静态方法 + def sayHello(name: String): Unit = { + println(s"hello in object,${name}") + } +} + +class DemoMethod{ + + // 普通方法,不是静态方法 + def sayHello(name: String): Unit = { + println(s"hello in class,${name}") + } +} diff --git a/src/main/scala/practise1/overall/Overall.scala b/src/main/scala/practise1/comprehensive/Comprehensive.scala similarity index 91% rename from src/main/scala/practise1/overall/Overall.scala rename to src/main/scala/practise1/comprehensive/Comprehensive.scala index 1a070dd..1887a75 100644 --- a/src/main/scala/practise1/overall/Overall.scala +++ b/src/main/scala/practise1/comprehensive/Comprehensive.scala @@ -1,6 +1,6 @@ -package practise1.overall +package practise1.comprehensive -object Overall { +object Comprehensive { def main(args: Array[String]): Unit = { /*第 1 课综合题 diff --git a/src/main/scala/practise1/practise/Practise1.scala b/src/main/scala/practise1/exercises/Exercises1.scala similarity index 87% rename from src/main/scala/practise1/practise/Practise1.scala rename to src/main/scala/practise1/exercises/Exercises1.scala index 18031f2..a710485 100644 --- a/src/main/scala/practise1/practise/Practise1.scala +++ b/src/main/scala/practise1/exercises/Exercises1.scala @@ -1,6 +1,6 @@ -package practise1.practise +package practise1.exercises -object Practise1 { +object Exercises1 { def main(args: Array[String]): Unit = { /* 练习 1:基本变量 diff --git a/src/main/scala/practise1/practise/Practise2.scala b/src/main/scala/practise1/exercises/Exercises2.scala similarity index 87% rename from src/main/scala/practise1/practise/Practise2.scala rename to src/main/scala/practise1/exercises/Exercises2.scala index 3e7ccb1..98a4e59 100644 --- a/src/main/scala/practise1/practise/Practise2.scala +++ b/src/main/scala/practise1/exercises/Exercises2.scala @@ -1,6 +1,6 @@ -package practise1.practise +package practise1.exercises -object Practise2 { +object Exercises2 { def main(args: Array[String]): Unit = { /* 练习 2:判断年龄 diff --git a/src/main/scala/practise1/practise/Practise3.scala b/src/main/scala/practise1/exercises/Exercises3.scala similarity index 90% rename from src/main/scala/practise1/practise/Practise3.scala rename to src/main/scala/practise1/exercises/Exercises3.scala index 314db34..85f4cfb 100644 --- a/src/main/scala/practise1/practise/Practise3.scala +++ b/src/main/scala/practise1/exercises/Exercises3.scala @@ -1,6 +1,6 @@ -package practise1.practise +package practise1.exercises -object Practise3 { +object Exercises3 { def main(args: Array[String]): Unit = { /* 练习 3:计算两个数 diff --git a/src/main/scala/practise1/practise/Practise4.scala b/src/main/scala/practise1/exercises/Exercises4.scala similarity index 94% rename from src/main/scala/practise1/practise/Practise4.scala rename to src/main/scala/practise1/exercises/Exercises4.scala index b49e1b2..96d3482 100644 --- a/src/main/scala/practise1/practise/Practise4.scala +++ b/src/main/scala/practise1/exercises/Exercises4.scala @@ -1,8 +1,8 @@ -package practise1.practise +package practise1.exercises import scala.util.Random -object Practise4 { +object Exercises4 { def main(args: Array[String]): Unit = { /*练习 4:成绩判断 diff --git a/src/main/scala/practise2/comprehensive/comprehensive.scala b/src/main/scala/practise2/comprehensive/comprehensive.scala new file mode 100644 index 0000000..93877d1 --- /dev/null +++ b/src/main/scala/practise2/comprehensive/comprehensive.scala @@ -0,0 +1,48 @@ +package practise2.comprehensive +/* +练习 6:综合题 ⭐ + +写一个函数: +describeStudent(name, age, score) + +例如: +describeStudent("Tom", 22, 85) + +输出: +Tom,今年22岁 +成绩:85 +评价:良好 + +要求: +name 是 String +age 是 Int +score 是 Int +函数返回 String +评价部分使用 if +不要在函数里面直接 println +*/ +object comprehensive { + def main(args: Array[String]): Unit = { + val result = describeStudent("Tom", 22, 85) + println(result) + } + + def describeStudent(name: String, age: Int, score: Int): String ={ + val evaluate = if (score >= 90) { + "优秀" + } else if (score >= 80) { + "良好" + } else if (score >= 60) { + "及格" + } else { + "不及格" + } + + s""" + |$name,今年${age}岁 + |成绩:$score + |评价:${evaluate}""".stripMargin + + } + +} diff --git a/src/main/scala/practise2/demo/DemoFunction.scala b/src/main/scala/practise2/demo/DemoFunction.scala new file mode 100644 index 0000000..2eb91a1 --- /dev/null +++ b/src/main/scala/practise2/demo/DemoFunction.scala @@ -0,0 +1,48 @@ +package practise2.demo + +object DemoFunction { + def main(args: Array[String]): Unit = { + hello() + // 简单的函数 + def hello(): Unit = { + println("Hello Scala") + } + + println("========") + + // 有参数的函数,定义一个叫 add 的函数,接收两个 Int 参数,返回一个 Int。 + /* + def 函数名(参数名: 参数类型): 返回值类型 = { + 函数体 + } + */ + def add(a: Int, b: Int): Int = { + a + b // Scala 不需要显式 return + } + val result = add(10, 20) + println(result) + + println("========") + + // 最后一句是什么,就返回什么 + def test(): String = { + val a = 10 + println(a) // 只是打印 + "Hello" // 才是返回值 + } + val resulTest = test() + + println("========") + + // 无参数函数 + def hello2(): String = { + "Hello" + } + println(hello2()) + println(hello2) // 也可以省略 () + + + // 函数可以非常短 + def add2(a: Int, b: Int): Int = a + b // 等价add函数 + } +} diff --git a/src/main/scala/practise2/exercises/Exercises1.scala b/src/main/scala/practise2/exercises/Exercises1.scala new file mode 100644 index 0000000..8a40923 --- /dev/null +++ b/src/main/scala/practise2/exercises/Exercises1.scala @@ -0,0 +1,21 @@ +package practise2.exercises +/* +练习 1:加法函数 + +定义: +add(a, b) + +要求: +输入 10 和 20 +返回 30 + +调用: +println(add(10, 20)) +*/ + +object Exercises1 { + def main(args: Array[String]): Unit = { + print(add(10,20)) + } + def add(a: Int, b: Int): Int = a + b +} diff --git a/src/main/scala/practise2/exercises/Exercises2.scala b/src/main/scala/practise2/exercises/Exercises2.scala new file mode 100644 index 0000000..40a3e63 --- /dev/null +++ b/src/main/scala/practise2/exercises/Exercises2.scala @@ -0,0 +1,21 @@ +package practise2.exercises +/* +练习 2:计算平方 + +定义: +square(x) + +例如: +println(square(5)) + +输出: +25 +要求返回类型写出来。 +*/ + +object Exercises2 { + def main(args: Array[String]): Unit = { + print(square(5)) + } + def square(x: Int): Int = x * x +} diff --git a/src/main/scala/practise2/exercises/Exercises3.scala b/src/main/scala/practise2/exercises/Exercises3.scala new file mode 100644 index 0000000..392cf97 --- /dev/null +++ b/src/main/scala/practise2/exercises/Exercises3.scala @@ -0,0 +1,19 @@ +package practise2.exercises +/* +练习 3:判断成年人 +定义: +isAdult(age) +例如: +18 → true +20 → true +17 → false +要求返回: +Boolean +*/ + +object Exercises3 { + def main(args: Array[String]): Unit = { + print(isAdult(20)) + } + def isAdult(age: Int): Boolean = age >= 18 +} diff --git a/src/main/scala/practise2/exercises/Exercises4.scala b/src/main/scala/practise2/exercises/Exercises4.scala new file mode 100644 index 0000000..4daa126 --- /dev/null +++ b/src/main/scala/practise2/exercises/Exercises4.scala @@ -0,0 +1,42 @@ +package practise2.exercises + +/* +练习 4:成绩评价 +定义: +getLevel(score) +要求: +90以上 → 优秀 + 80以上 → 良好 + 60以上 → 及格 + 否则 → 不及格 +例如: +println(getLevel(95)) +println(getLevel(83)) +println(getLevel(61)) +println(getLevel(30)) +输出: +优秀 +良好 +及格 +不及格 +*/ + +object Exercises4 { + def main(args: Array[String]): Unit = { + println(getLevel(95)) + println(getLevel(83)) + println(getLevel(61)) + println(getLevel(30)) + } + + def getLevel(score: Double): String = + if (score >= 90) { + "优秀" + } else if (score >= 80) { + "良好" + } else if (score >= 60) { + "及格" + } else { + "不及格" + } +} diff --git a/src/main/scala/practise2/exercises/Exercises5.scala b/src/main/scala/practise2/exercises/Exercises5.scala new file mode 100644 index 0000000..d6504ff --- /dev/null +++ b/src/main/scala/practise2/exercises/Exercises5.scala @@ -0,0 +1,20 @@ +package practise2.exercises + +/* +练习 5:计算两个数中的较大值 +定义: +max(a, b) +例如: +println(max(10, 20)) +输出: +20 +要求返回较大的那个数。 +*/ +object Exercises5 { + def main(args: Array[String]): Unit = { + println(max(10, 20)) + } + + def max(a: Int, b: Int): Int = + if (a > b) a else b +}