Scala学习笔记3–控制语句

王 茂南 2019年6月12日12:02:04
评论
3093字阅读10分18秒
摘要这一部分主要是关于Scala的控制语句,包括If语句,循环语句(for和while),Match语句(类似Switch语句),和异常处理;最后提供了一种代替continue和break的方法(由于scala中没有break和continue)

这一部分主要是关于Scala的控制语句,包括If语句,循环语句(for和while),Match语句(类似Switch语句),和异常处理;最后提供了一种代替continue和break的方法(由于scala中没有break和continue)。下面对每一部分进行叙述。

if语句

if语句可以有两种风格的写法,一种是类似java中的写法:

  1. // if语句(java风格)
  2. var age:Int=25
  3. var result:String=""
  4. if (age>20){
  5.     result="worker"
  6. }else
  7. {
  8.     result="student"
  9. }
  10. println(result)
  11. >> worker

还有一种利用scala可以直接返回结果:

  1. var age:Int=25
  2. var result=if (age>20"worker" else "student"
  3. println(result)
  4. >> worker

循环

for循环

for表达式之枚举集合元素

  1. for (i<- 1 to 4){
  2.     println("Interation : "+i.toString)
  3. }
  4. >> Interation : 1
  5. >> Interation : 2
  6. >> Interation : 3
  7. >> Interation : 4
除了 1 to 4这种写法,也可以使用until的写法:
  1. for(i<-0 until 4){
  2.     println(i)
  3. }

for表达式之过滤

我们可以在写循环的时候就将一些不要的元素过滤掉,注意每个语句之间使用隔开:
  1. for (i<- 0 to 20;
  2.     if i%5==0;
  3.     if i != 10){
  4.     println(i)
  5. }
  6. >> 0
  7. >> 5
  8. >> 15
  9. >> 20
下面举一个有实际作用的例子,打印出以scala结尾的文件的名称:
  1. val filesHere=(new java.io.File(".")).listFiles
  2. for (file<-filesHere
  3.     if file.getName.endsWith(".scala")
  4.     if file.isFile){
  5.     // 只打印scala结尾的文件名称
  6.     println(file)
  7. }

for表达式之嵌套迭代(多层循环)

  1. for ( i <- 1 to 2;
  2.     j <- 3 to 5
  3. ){
  4.     println("i : "+i + ", j : "+j)
  5. }
  6. >> i : 1, j : 3
  7. >> i : 1, j : 4
  8. >> i : 1, j : 5
  9. >> i : 2, j : 3
  10. >> i : 2, j : 4
  11. >> i : 2, j : 5

for表达式之绑定中间变量

  1. for (i<-0 to 10;
  2.     j<- 11 to 21;
  3.     k = i + j; // 这里绑定了中间变量k
  4.     if k % 12 == 0){
  5.     println("i:"+i+",j:"+j+",i+j="+(i+j).toString)
  6. }
  7. >> i:0,j:12,i+j=12
  8. >> i:1,j:11,i+j=12
  9. >> i:3,j:21,i+j=24
  10. >> i:4,j:20,i+j=24
  11. >> i:5,j:19,i+j=24
  12. >> i:6,j:18,i+j=24
  13. >> i:7,j:17,i+j=24
  14. >> i:8,j:16,i+j=24
  15. >> i:9,j:15,i+j=24
  16. >> i:10,j:14,i+j=24
 

while循环

while循环举一个例子:

  1. def gcdloop(x:Long,y:Long):String={
  2.     var a=x
  3.     var b=y
  4.     while(a!=0){
  5.         var temp=a
  6.         a = b%a
  7.         b=temp
  8.     }
  9.     "最大公约数为 : " + b.toString
  10. }
  11. gcdloop(1000,200)
  12. >> res164: String = 最大公约数为 : 200

do-while循环

do-while循环是知道while中的条件满足才停止:

  1. var line=""
  2. do {
  3.     line = scala.io.StdIn.readLine()
  4.     println("Read : "+line)
  5. }while(line!="")

Match表达式

Scala中的Match表达式类似与python中的Switch,我们举一个例子看一下:
  1. val args = Array("eggs")
  2. val firstArg = if (args.length>0) args(0else ""
  3. val friend = firstArg match {
  4.     case "salt" => "pepper"
  5.     case "chips" => "salsa"
  6.     case "eggs" => "bacon"
  7.     // scala缺省匹配为 _ 
  8.     case _ => "huh?"
  9. }
  10. println(friend)
  11. >> bacon

Scala中代替break与continue的方法

我们在这里举一个例子,打印出Array中的元素,遇到 .scala 结尾的则停止,这个的关键就是使用一个foundIt的布尔值变量进行控制,当遇到 .scala 结尾的则foundIt变为True:
  1. var i=0
  2. var foundIt=false
  3. val args = Array("I","Like","Scala","test.scala","test")
  4. while (i<args.length && !foundIt) {
  5.     if (!args(i).startsWith("-")) {
  6.         if (args(i).endsWith(".scala")) {
  7.             foundIt=true
  8.         }
  9.     }
  10.     if (!foundIt){
  11.         println(args(i))
  12.         i = i + 1
  13.     }
  14. }
  15. >> I
  16. >> Like
  17. >> Scala
 

异常处理

我们通过try,catch,finally来进行异常的捕获,其中finally一般进行一些清理工作(如文件的关闭),不进行返回值(一定要返回要使用return);

  1. import java.io.FileReader
  2. import java.io.FileNotFoundException
  3. import java.io.IOException
  4. try{
  5.     val f = new FileReader("./readme.txt")
  6. catch
  7. {
  8.     case ex: FileNotFoundException => println("通过catch捕获的异常")
  9. finally
  10. {
  11.     // finally 不管try是否抛出异常都会执行
  12.     // 在finally一般不需要返回值,只需要做一些清理工作,比如关闭文件
  13.     println("异常捕获测试!")
  14. }
  15. >> 通过catch捕获的异常
  16. >> 异常捕获测试!

关于finally使用return的例子如下,只有finally使用return才能将返回的值会覆盖try-catch的值:

  1. def g():Int={
  2.     try{
  3.         1
  4.     } finally{
  5.         return 2
  6.     }
  7. }
  8. scala> g()
  9. >> res166: Int = 2

 

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2019年6月12日12:02:04
  • 转载请务必保留本文链接:https://mathpretty.com/9637.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: