您现在的位置是:首页 >其他 >scala内建控制结构网站首页其他
scala内建控制结构
简介scala内建控制结构
一、条件表达式
(一)语法格式
- if (条件) 值1 else 值2
(二)执行情况
- 条件为真,结果是值1;条件为假,结果是值2。如果if和else的返回结果同为某种类型,那么条件表达式结果也是那种类型,否则就是Any类型
- Scala的条件表达式有点类似于Java的条件运算符
(三)案例演示
任务1、根据输入值的不同进行判断
任务2、编写Scala程序,判断奇偶性
- 打开Scala项目ScalaDemo,创建net.huawei.day02包,在包里创建Example01对象
package net.gxf.day02
import scala.io.StdIn
/**
* 功能:判断奇偶性
*/
object Example01 {
def main(args: Array[String]): Unit = {
print("n = ")
val n = StdIn.readLine.toInt
val result = if (n % 2 == 0)
n.toString + "是偶数~"
else
n.toString + "是奇数~"
println(result)
}
}
二、块表达式
案例演示
三、for循环
(一)单重for循环
- 案例演示
任务1:输出1到10
- 两种方式实现,一种使用Range类,一种使用to运算符
任务2、遍历字符串,输出每个字符
- 方法一、按索引取字符串的每个字符(传统for循环)
- 方法二:将字符串看作一个由多个字符组成的集合(增强for循环)
任务3、计算 1 + 2 + 3 + … + 100
- 注意sum必须定义为var型变量
- 利用集合的归并方法来求和最简单
任务4、输出列表内的偶数(过滤)
任务5、输出全部两位素数
for (n <- 10 to 100; if !(n % 2 == 0 || n % 3 == 0 || n % 5 == 0 || n % 7 == 0)) print(n.toString + " ")
(二)嵌套for循环
案例演示
任务1、打印九九表
package net.gxf.day02
/**
* 功能:双重循环打印九九表
* 作者:gxg
* 日期:2023年02月22日
*/
object Example02 {
def main(args: Array[String]): Unit = {
for (i <- 1 to 9) {
for (j <- 1 to i) {
print(i.toString + "×" + j + "=" + (i * j) + " ")
}
println()
}
}
}
方法一、采用双重循环来实现
方法二、采用单重循环来实现
package net.gxf.day02
/**
* 功能:单重循环打印九九表
* 作者:gxf
* 日期:2023年02月22日
*/
object Example03 {
def main(args: Array[String]): Unit = {
for (i <- 1 to 9; j <- 1 to i) {
print(i.toString + "×" + j + "=" + (i * j) + " ")
if (j == i) println()
}
}
}
方法三、采用单重循环与流间变量绑定来实现
package net.gxf.day02
/**
* 功能:单重循环与流间变量绑定打印九九表
* 作者:gxf
* 日期:2023年02月22日
*/
object Example04 {
def main(args: Array[String]): Unit = {
for (i <- 1 to 9; j <- 1 to i; sep = if (j == i) "
" else " ") {
print(i.toString + "×" + j + "=" + (i * j) + sep)
}
}
}
方法四、采用单重循环、流间变量与yield来实现
package net.gxf.day02
/**
* 功能:采用单重循环、流间变量与yield打印九九表
* 作者:gxf
* 日期:2023年02月22日
*/
object Example05 {
def main(args: Array[String]): Unit = {
val list = for (i <- 1 to 9; j <- 1 to i; sep = if (j == i) "
" else " ")
yield i.toString + "×" + j + "=" + (i * j) + sep
list.foreach(print)
}
}
四、条件循环
(一)while循环
任务1、计算1+ 2 + 3 + … + 100
package net.gxf.day02
/**
* 功能:等差数列求和
* 作者:gxf
* 日期:2023年02月23日
*/
object Example10 {
def main(args: Array[String]): Unit = {
var sum = 0
var i = 1
while (i <= 100) {
sum = sum + i
i = i + 1
}
println("1 + 2 + 3 + ... + 100 = " + sum)
}
}
- 采用函数式风格来写代码,递归函数来实现求和,注意:此处sum是常量
package net.gxf.day02
/**
* 功能:等差数列求和
* 作者:gxf
* 日期:2023年02月23日
*/
object Example10_ {
def mx(n: Int, sum: Int): Int = {
if (n > 0) mx(n - 1, sum + n) else sum
}
def main(args: Array[String]): Unit = {
println("1 + 2 + 3 + ... + 100 = " + mx(100, 0))
}
}
任务2、打印全部水仙花数
package net.gxf.day02
import scala.io.StdIn
/**
* 功能:判断奇偶性
*/
object Example01 {
def main(args: Array[String]): Unit = {
print("n = ")
val n = StdIn.readLine.toInt
val result = if (n % 2 == 0)
n.toString + "是偶数~"
else
n.toString + "是奇数~"
println(result)
}
}
(二)do while循环
任务:计算1+ 2 + 3 + … + 100
package net.gxf.day02
/**
* 功能:等差数列求和
* 作者:gxf
* 日期:2023年02月23日
*/
object Example12 {
def main(args: Array[String]): Unit = {
var sum = 0
var i = 1
do {
sum = sum + i
i = i + 1
} while (i <= 100)
println("1 + 2 + 3 + ... + 100 = " + sum)
}
}
五、异常处理
任务:演示try-catch-finally
- try-catch-finally是有返回值的:如果没有异常就是try语句的返回值,如果有异常就是catch语句的返回值。注意不会是finally的返回值,finally即使有返回值,也会被抛弃,这点和Java是不同的。
六、match结构
案例演示
package net.gxf.day02
import scala.io.StdIn
/**
* 功能:判断奇偶性
*/
object Example01 {
def main(args: Array[String]): Unit = {
print("n = ")
val n = StdIn.readLine.toInt
val result = if (n % 2 == 0)
n.toString + "是偶数~"
else
n.toString + "是奇数~"
println(result)
}
}
七、变量作用域
(一)Java变量作用域
- 1、内部能访问外部
- 2、外部不能看内部
(二)Scala变量作用域
- 1、内部不能访问外部
package net.gxf.day02
/**
* 功能:变量作用域 - 内部能访问外部
* 作者:gxf
* 日期:2023年03月01日
*/
object Example15 {
def main(args: Array[String]): Unit = {
val message = "欢迎访问醉美泸州~"
if (true) {
println(message)
}
}
}
- 2、外部不能访问内部
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。