这一部分主要是关于Scala的控制语句,包括If语句,循环语句(for和while),Match语句(类似Switch语句),和异常处理;最后提供了一种代替continue和break的方法(由于scala中没有break和continue)。下面对每一部分进行叙述。
文章目录(Table of Contents)
if语句
if语句可以有两种风格的写法,一种是类似java中的写法:
- // if语句(java风格)
- var age:Int=25
- var result:String=""
- if (age>20){
- result="worker"
- }else
- {
- result="student"
- }
- println(result)
- >> worker
还有一种利用scala可以直接返回结果:
- var age:Int=25
- var result=if (age>20) "worker" else "student"
- println(result)
- >> worker
循环
for循环
for表达式之枚举集合元素
- for (i<- 1 to 4){
- println("Interation : "+i.toString)
- }
- >> Interation : 1
- >> Interation : 2
- >> Interation : 3
- >> Interation : 4
- for(i<-0 until 4){
- println(i)
- }
for表达式之过滤
我们可以在写循环的时候就将一些不要的元素过滤掉,注意每个语句之间使用;隔开:- for (i<- 0 to 20;
- if i%5==0;
- if i != 10){
- println(i)
- }
- >> 0
- >> 5
- >> 15
- >> 20
- val filesHere=(new java.io.File(".")).listFiles
- for (file<-filesHere
- if file.getName.endsWith(".scala")
- if file.isFile){
- // 只打印scala结尾的文件名称
- println(file)
- }
for表达式之嵌套迭代(多层循环)
- for ( i <- 1 to 2;
- j <- 3 to 5
- ){
- println("i : "+i + ", j : "+j)
- }
- >> i : 1, j : 3
- >> i : 1, j : 4
- >> i : 1, j : 5
- >> i : 2, j : 3
- >> i : 2, j : 4
- >> i : 2, j : 5
for表达式之绑定中间变量
- for (i<-0 to 10;
- j<- 11 to 21;
- k = i + j; // 这里绑定了中间变量k
- if k % 12 == 0){
- println("i:"+i+",j:"+j+",i+j="+(i+j).toString)
- }
- >> i:0,j:12,i+j=12
- >> i:1,j:11,i+j=12
- >> i:3,j:21,i+j=24
- >> i:4,j:20,i+j=24
- >> i:5,j:19,i+j=24
- >> i:6,j:18,i+j=24
- >> i:7,j:17,i+j=24
- >> i:8,j:16,i+j=24
- >> i:9,j:15,i+j=24
- >> i:10,j:14,i+j=24
while循环
while循环举一个例子:
- def gcdloop(x:Long,y:Long):String={
- var a=x
- var b=y
- while(a!=0){
- var temp=a
- a = b%a
- b=temp
- }
- "最大公约数为 : " + b.toString
- }
- gcdloop(1000,200)
- >> res164: String = 最大公约数为 : 200
do-while循环
do-while循环是知道while中的条件满足才停止:
- var line=""
- do {
- line = scala.io.StdIn.readLine()
- println("Read : "+line)
- }while(line!="")
Match表达式
Scala中的Match表达式类似与python中的Switch,我们举一个例子看一下:- val args = Array("eggs")
- val firstArg = if (args.length>0) args(0) else ""
- val friend = firstArg match {
- case "salt" => "pepper"
- case "chips" => "salsa"
- case "eggs" => "bacon"
- // scala缺省匹配为 _
- case _ => "huh?"
- }
- println(friend)
- >> bacon
Scala中代替break与continue的方法
我们在这里举一个例子,打印出Array中的元素,遇到 .scala 结尾的则停止,这个的关键就是使用一个foundIt的布尔值变量进行控制,当遇到 .scala 结尾的则foundIt变为True:- var i=0
- var foundIt=false
- val args = Array("I","Like","Scala","test.scala","test")
- while (i<args.length && !foundIt) {
- if (!args(i).startsWith("-")) {
- if (args(i).endsWith(".scala")) {
- foundIt=true
- }
- }
- if (!foundIt){
- println(args(i))
- i = i + 1
- }
- }
- >> I
- >> Like
- >> Scala
异常处理
我们通过try,catch,finally来进行异常的捕获,其中finally一般进行一些清理工作(如文件的关闭),不进行返回值(一定要返回要使用return);
- import java.io.FileReader
- import java.io.FileNotFoundException
- import java.io.IOException
- try{
- val f = new FileReader("./readme.txt")
- } catch
- {
- case ex: FileNotFoundException => println("通过catch捕获的异常")
- } finally
- {
- // finally 不管try是否抛出异常都会执行
- // 在finally一般不需要返回值,只需要做一些清理工作,比如关闭文件
- println("异常捕获测试!")
- }
- >> 通过catch捕获的异常
- >> 异常捕获测试!
关于finally使用return的例子如下,只有finally使用return才能将返回的值会覆盖try-catch的值:
- def g():Int={
- try{
- 1
- } finally{
- return 2
- }
- }
- scala> g()
- >> res166: Int = 2
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论