Scala(三)之“控制结构”

原创 2016年08月29日 23:15:23
  1. for和foreach循环
    遍历一个集合中的所有元素,对集合中的每个元素进行操作,或者利用现有的集合创建一个新集合。
scala> val a = Array("apple", "banana", "orange")
a: Array[String] = Array(apple, banana, orange)

scala> for(e <- a) println(e)
apple
banana
orange

使用for/yield组合可以从输入的集合中生成一个新的集合。

scala> val newArray = for(e <- a) yield e.toUpperCase
newArray: Array[String] = Array(APPLE, BANANA, ORANGE)

for循环计数器

scala> for(i <- 0 until 10){
     | print(i)
     | }
0123456789

生成器与守卫语句

scala> for(i <- 1 to 3)println(i)
1
2
3

scala> 1 to 3
res47: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)

scala> for(i <- 1 to 3) println(i)
1
2
3

scala> 1 to 3
res49: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)

scala> for(i <- 1 to 10 if i < 4) println(i)
1
2
3

遍历Map集合

scala> val names = Map("fname" -> "Robert",
     | "lname" -> "Goren")
names: scala.collection.immutable.Map[String,String] = Map(fname -> Robert, lname -> Goren)

scala> for((k, v) <- names) println(s"key: $k, value: $v")
key: fname, value: Robert
key: lname, value: Goren

for循环中使用多个计数器

scala> for(i <- 1 to 2; j <- 1 to 2) println(s"i = $i, j = $j")
i = 1, j = 1
i = 1, j = 2
i = 2, j = 1
i = 2, j = 2
// 对于对个for循环推荐使用大括号的风格
scala> for{
     | i <- 1 to 2
     | j <- 1 to 2
     | }println(s"i = $i, j = $j")
i = 1, j = 1
i = 1, j = 2
i = 2, j = 1
i = 2, j = 2

for循环为多维数组赋值

scala> val array = Array.ofDim[Int](2, 2)
array: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))

scala> for{
     | i <- 0 to 1
     | j <- 0 to 1
     | }println(s"($i)($j) = ${array(i)(j)}")
(0)(0) = 0
(0)(1) = 0
(1)(0) = 0
(1)(1) = 0

for循环中嵌入if语句,if语句又叫做过滤器

scala> for{
     | i <- 1 to 10
     | if i % 2 == 0
     | }println(i)
2
4
6
8
10

scala> for{
     | i <- 1 to 10
     | if i > 3
     | if i < 6
     | if i % 2 == 0
     | }println(i)
4

创建for表达式(for/yield组合)
在一个已有的集合上,使用带有yield语句的for循环和算法,生成一个新的集合。
除了极个别的情况,for推导不会改变集合的返回类型

scala> val name = Array("chris", "ed", "maurice")
name: Array[String] = Array(chris, ed, maurice)

scala> val capName = for(e <- name) yield e.capitalize
capName: Array[String] = Array(Chris, Ed, Maurice)

Scala中没有break和continue关键字,scala.util.control.Breaks类提供了类似的功能。

case语句中匹配多个条件

scala> val i = 5
i: Int = 5

scala> i match {
     | case 1 | 3 | 5 | 7 | 9 => println("odd")
     | case 2 | 4 | 6 | 8 | 10 => println("even")
     | }
odd

try/catch匹配一个或者多个异常

scala> val s = "foo"
s: String = foo

scala> try{
     | val i = s.toInt
     | }catch{
     | case e:Exception => e.printStackTrace
     | }
java.lang.NumberFormatException: For input string: "foo"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:272)
    at scala.collection.immutable.StringOps.toInt(StringOps.scala:29)
    at $line124.$read$$iw$$iw$.liftedTree1$1(<console>:14)
    at $line124.$read$$iw$$iw$.<init>(<console>:13)
    at $line124.$read$$iw$$iw$.<clinit>(<console>)
    at $line124.$eval$.$print$lzycompute(<console>:7)
    at $line124.$eval$.$print(<console>:6)
    at $line124.$eval.$print(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:786)
    at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:1047)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:638)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:637)
    at scala.reflect.internal.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31)
    at scala.reflect.internal.util.AbstractFileClassLoader.asContext(AbstractFileClassLoader.scala:19)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest.loadAndRunReq(IMain.scala:637)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:569)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:565)
    at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:807)
    at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:825)
    at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:825)
    at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:825)
    at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:825)
    at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:681)
    at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:395)
    at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:415)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:923)
	at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:909)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:909)
    at scala.reflect.internal.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:97)
    at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:909)
    at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:74)
    at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:87)
    at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:98)
    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:103)
    at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
版权声明:本文为博主原创文章,转载请声明出处。

Scala的内建控制结构

Scala中的内建控制机构仅有if、while、for、try、match和函数调用。虽然Scala的基础控制结构少,但也足以支持指令式语言里所有的实质内容。因为它们都能产生值,有助于缩短代码。 ...
  • xxfigo
  • xxfigo
  • 2016年08月25日 11:22
  • 606

【Java】]Java的三大控制结构

前面我们已经对基本数据类型,引用数据类型以及运算符等做了详细的介绍,那我们接下来学习一下Java基础语法。     走遍天下的三大控制结构我们大家还记得吗?无论我们学习什么专业,无论我们学习什么语言...
  • u013034286
  • u013034286
  • 2016年03月05日 21:13
  • 4768

走遍天下的三大vb控制结构

学习VB编程语言,有些人认为很难,有些人却认为特别容易,一学就会,简单至极,你是否也有这样的感受呢?下面让我来为大家解惑答疑吧。         计算机执行的控制流程只能有三种基本控制结构组成,即:...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2012年05月28日 13:42
  • 7438

scala学习三 控制结构

本篇采用比较的方式展示Java和scala代码  (在scala中出现的 =>符合基本可以理解为一个函数了) Java版本的if语句: // This is Java String filen...
  • hao707822882
  • hao707822882
  • 2014年07月31日 23:18
  • 378

scala常用语法之控制结构

字符串内插,并格式化数值scala> val name = "Jerry" name: String = Jerry scala> val info = s"My name is $name." /...
  • OiteBody
  • OiteBody
  • 2016年09月19日 16:32
  • 333

Scala 之控制结构(二)

一、for循环Scala中的for循环语句格式如下: for( 变量
  • u013850277
  • u013850277
  • 2017年11月30日 17:21
  • 24

scala基础之控制结构

scala基础之控制结构:
  • wangmuming
  • wangmuming
  • 2014年06月27日 15:55
  • 6255

scala学习之控制结构

今天接着林老师的scala教程之控制结构,学习内容主要有三个,分别是if 、while、for这三个。不管哪种语言,这三种结构用的都非常非常频繁。所以,sclala语言也不除外。scala:if条件表...
  • u011531010
  • u011531010
  • 2017年03月03日 10:58
  • 133

Scala入门之控制结构

蘑菇云课堂代码package com.dtspark.scala.basics/** * Scala中的基本控制结构有顺序、条件和循环三种方式,这个其它的JVM语言是一致的,但是Scala也有一些高...
  • pofengliuming
  • pofengliuming
  • 2016年08月06日 23:50
  • 180

scala控制结构

scala中的基本控制结构:1.顺序2.条件3.循环,和其他的JVM语言是一致的。 scala也有一些高级的控制结构,例如模式匹配。 if条件表达式会根据if后面括号里面的boolean来决定整个...
  • u013063153
  • u013063153
  • 2016年12月01日 09:53
  • 165
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Scala(三)之“控制结构”
举报原因:
原因补充:

(最多只允许输入30个字)