Scala学习笔记(二)(for循环相关)

Scala里if...else语句

if语句不管是在哪种语言里是使用最多的语句了.

scala的if语句与java如出一辙.

举个栗子就不再赘述:

一个 if 语句的语法:

if(Boolean_expression)
{
   // Statements will execute if the Boolean expression is true
}

如果布尔表达式的值为true,那么if语句里面的代码模块将被执行。如果不是这样,第一组码if语句结束后(右大括号后)将被执行。

示例:

object Test {
   def main(args: Array[String]) {
      var x = 10;

      if( x < 20 ){
         println("This is if statement");
      }
   }
}

if...else语句:

if语句可以跟着一个可选的else语句,当 else 块执行时,布尔表达式条件是假的。

语法:

if...else的语法是:

if(Boolean_expression){
   //Executes when the Boolean expression is true
}else{
   //Executes when the Boolean expression is false
}

示例:

object Test {
   def main(args: Array[String]) {
      var x = 30;

      if( x < 20 ){
         println("This is if statement");
      }else{
         println("This is else statement");
      }
   }
}

if...else if...else语句:

if语句可以跟着一个可选的else if ... else语句,这是非常有用的使用 if...else if如果测试各种条件声明。

当使用 if , else if , else 语句有几点要牢记。

  • if可以有零或一个else,它必须跟在else if后面。

  • 一个if 可以有零到多个else if,并且它们必须在else之前。

  • 一旦一个 else if 匹配成功,剩余的else if或else不会被测试匹配。

语法:

if...else if...else的语法是:

if(Boolean_expression 1){
   //Executes when the Boolean expression 1 is true
}else if(Boolean_expression 2){
   //Executes when the Boolean expression 2 is true
}else if(Boolean_expression 3){
   //Executes when the Boolean expression 3 is true
}else {
   //Executes when the none of the above condition is true.
}

示例:

object Test {
   def main(args: Array[String]) {
      var x = 30;

      if( x == 10 ){
         println("Value of X is 10");
      }else if( x == 20 ){
         println("Value of X is 20");
      }else if( x == 30 ){
         println("Value of X is 30");
      }else{
         println("This is else statement");
      }
   }
}

while语句也是一样

while 循环语句多次执行,只要给定的条件为真执行目标语句。

语法:

Scala while循环的语法是:

while(condition){
   statement(s);
}

在这里,声明可以是单个语句或语句块。所述条件可以是任何表达式,真值是任何非零值。当条件为true,则循环迭代。当条件为faklse,则程序控制进到紧接在循环之后的行。

举个栗子:

object Test {
   def main(args: Array[String]) {
      // Local variable declaration:
      var a = 10;

      // while loop execution
      while( a < 20 ){
         println( "Value of a: " + a );
         a = a + 1;
      }
   }
}

在程序运行之后产生如下结果:
value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

do....while循环

不像while循环,测试循环条件在循环顶部,do ... while循环循环在底部检查状态。do... while循环类似于while循环,不同的是do ... while循环是保证至少执行一次。

语法:

Scala中do... while循环的语法是:

do{
   statement(s);
}while( condition );

注意,条件表达式出现在循环结束,所以在循环语句(多个)执行一次前的状态进行测试。如果条件为真,控制流跳转回后将循环语句(S)再次执行。重复这个过程,直到给定的条件为假。

代码:

object Test {
   def main(args: Array[String]) {
      // Local variable declaration:
      var a = 10;

      // do loop execution
      do{
         println( "Value of a: " + a );
         a = a + 1;
      }while( a < 20 )
   }
}
-------------------------------------------------------------------------------(一条分界线,因为接下来是比较重要的部分)------------------------------------------------------------------------------------------------------
比较重要的部分是for循环;
scala中的for循环与java相同又不同
java的for循环是for(int i=0; i<xxx; i++)
scala的for循环是for(a <- 0 to xxxxx) (to可以替换成until,不过是一个包不包含右侧数字的关系)
说他们相同是因为底层或者说理念相同:
他们都是一个赋值的过程,java赋值的过程更底层一点,而scala更像是封装好for底层一样.
而scala的for循环还有一个特点:

for循环中,循环将遍历给定范围内的所有可能的计算,可以使用分号 (;) 分隔多个范围。下面是使用两个范围的例子,也可以使用两个以上的范围。

object Test {
   def main(args: Array[String]) {
      var a = 0;
      var b = 0;
      // for loop execution with a range
      for( a <- 1 to 3; b <- 1 to 3){
         println( "Value of a: " + a );
         println( "Value of b: " + b );
      }
   }
}

让我们编译和运行上面的程序,这将产生以下结果:

Value of a: 1
Value of b: 1
Value of a: 1
Value of b: 2
Value of a: 1
Value of b: 3
Value of a: 2
Value of b: 1
Value of a: 2
Value of b: 2
Value of a: 2
Value of b: 3
Value of a: 3
Value of b: 1
Value of a: 3
Value of b: 2
Value of a: 3
Value of b: 3

使用for循环遍历list集合:
object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6);
    
      // for loop execution with a collection
      for( a <- numList ){
      //注意此时a被赋值的是list集合中的元素
println( "Value of a: " + a ); } } }

让我们编译和运行上面的程序,这将产生以下结果:

C:/>scalac Test.scala
C:/>scala Test
value of a: 1
value of a: 2
value of a: 3
value of a: 4
value of a: 5
value of a: 6
在scala中for循环可以添加条件进行过滤

Scala for循环允许过滤出使用一个或多个某些元素if语句(多个)。以下是对用于沿使用过滤器循环的语法。

for( var x <- List
      if condition1; if condition2...
   ){
   statement(s);
}

要添加多个过滤器到一个for表达式,分离过滤用分号(;)。

例子:

以下是for循环使用滤器的例子:

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);

      // for loop execution with multiple filters
      for( a <- numList
           if a != 3; if a < 8 ){
         println( "Value of a: " + a );
      }
   }
}

让我们编译和运行上面的程序,这将产生以下结果:

C:/>scalac Test.scala
C:/>scala Test
value of a: 1
value of a: 2
value of a: 4
value of a: 5
value of a: 6
value of a: 7

for循环采用yield:

可以从存储中返回for循环中的变量的值,也可以通过函数返回。要做到这一点,可以通过关键字yield前缀的for表达式体,如下所示:

var retVal = for{ var x <- List
     if condition1; if condition2...
}yield x

注意在大括号已被用来保持变量和条件以及retVal的是其中x的所有值将被储存在收集的形式的变量。

举个栗子:

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);

      
      var retVal = for{ a <- numList 
                        if a != 3; if a < 8
                      }yield a

         for( a <- retVal){
         println( "Value of a: " + a );
      }
   }
}
运行结果为:
C:/>scalac Test.scala
C:/>scala Test
value of a: 1
value of a: 2
value of a: 4
value of a: 5
value of a: 6
value of a: 7
此处需要解释一下,yield的作用是在for循环结束后返回的数据封装进yield中
我把代码进行了优化,如下:
object Demo02 {
def main(args: Array[String]) {
var a = 0;
val numList = List("a","b","c","d","e","f","g","h","i","j","k");

// for loop execution with a yield
var retVal = for{ a <- numList
if a != "c" ; if a!="a"
}yield a

// Now print returned values using another loop.
for( a <- retVal){
println( "Value of a: " + a );
}
}
}

结果为:

Value of a: b
Value of a: d
Value of a: e
Value of a: f
Value of a: g
Value of a: h
Value of a: i
Value of a: j
Value of a: k

Process finished with exit code 0

 
posted @ 2017-06-05 15:01  dade丶  阅读(2763)  评论(0编辑  收藏  举报