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