if else

  • 单分支

    1. if(n == 0)
    2. println("n=0")
  • 多分支

    1. if(n == 0) {
    2. println("n=0")
    3. }else if(n < 0){
    4. println("-")
    5. }else {
    6. println("+")
    7. }
  • 分支语句返回值

    1. def main(args: Array[String]) :Unit={
    2. val n = -11
    3. val result:String =
    4. if(n == 0) {
    5. println("n=0")
    6. "n=0" //想要返回String类型,在后面添加String语句
    7. }else if(n < 0){
    8. println("-")
    9. "-"
    10. }else {
    11. println("+")
    12. "+"
    13. }
    14. }
    1. def main(args: Array[String]) :Unit={
    2. val n = -11
    3. val result:Unit = //容许使用Unit来返回String
    4. if(n == 0) {
    5. println("n=0")
    6. "n=0"
    7. }else if(n < 0){
    8. println("-")
    9. "-"
    10. }else {
    11. println("+")
    12. "+"
    13. }
    14. }

    For推导式

    1. //范围遍历:从1遍历到10
    2. for (i <- 1 to 10){
    3. print(i)
    4. }
    5. //不包含10(边界)进行遍历
    6. for(i <- Range(1,10)){
    7. print(i)
    8. }
    9. for(i <- 1 until(10)){
    10. print(i)
    11. }

    集合遍历

    1. for(i <- Array(1,2,3,4)){
    2. print(i)
    3. }
    4. for(i <- List(1,2,3,4)){
    5. print(i)
    6. }
    7. for(i <- Set(1,2,3,4)){
    8. print(i)
    9. }

    循环守卫

    for推导式和if判断语句结合
    image.png

    循环步长

    ```scala

    步长为2遍历输出

    for (i <- 1 to 10 by 2){

    1. print(i)

    } // 13579

    倒序输出

    for (i <- 30 to 10 by -2){

    1. print(i +"\\")

    } // 30\28\26\24\22\20\18\16\14\12\10\

for (i <- 1 to 10 reverse){ print(i +”\“) } // 10\9\8\7\6\5\4\3\2\1\

0.5遍历

for (i <- 1.0 to 10.0 by 0.5){ //此时使用to有可能精度缺失,使用 print(i +”\“) } // 1.0\1.5\2.0\2.5\3.0\3.5\4.0\4.5\5.0\5.5\6.0\6.5\7.0\7.5\8.0\8.5\9.0\9.5\10.0\

  1. <a name="OoFfo"></a>
  2. ## 循环嵌套
  3. ```scala
  4. #Java写法
  5. for(i <- 1 to 5){
  6. for(j <- 1 to 5){
  7. println(i+ "&" + j )
  8. }
  9. }
  10. #Scala写法
  11. for(i <- 1 to 5;j <- 1 to 5){
  12. println(i+ "&" + j )
  13. }
  14. for{
  15. i<- 1 to 10
  16. j= 10 -i
  17. }
  18. {
  19. println(i+ "&" + j)
  20. }

循环返回值

  1. val a = for(i <- 1 to 10) yield i
  2. println(a)
  3. //Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  4. val b: IndexedSeq[Int]= for(i <- 1 to 10) yield i *2
  5. println(b)
  6. //Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

while和do…while

在Scala是不推荐的 因为要在while循环体外定义一个变量

  1. var a:Int= 10
  2. while(a >= 0){
  3. println(a)
  4. a -=1
  5. }

循环中断

Scala内置控制结构特地去掉了break和continue,是为了更好的适应函数式编程,推荐使用函数式的风格解决break和continue的功能,而不是一个关键字。Scala中使用breakable控制结构来实现break 和continue 功能。

使用breakable()
示例:

  1. import scala.util.control._
  2. loop.breakable {
  3. for( a <- numList){
  4. println( "Value of a: " + a );
  5. if( a == 4 ){
  6. loop.break;
  7. }
  8. }
  9. }