首页 > 代码库 > Scala学习笔记(二)(for循环相关)
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
Scala学习笔记(二)(for循环相关)