scala打印九九乘法表的5種實現


使用scala打印九九乘法表,可以有多種實現方法,實現的過程充分的體現的scala語言的優勢和巨大的簡潔性和高效性,

下面我用了5種方法實現九九乘法表。

使用類似於java,c++等指令風格的的編程實現,源碼如下:

  //這里打印倒向九九乘法口訣表
  /*指令風格的編程實現九九乘法表*/
  def printMultiTable() {
    var i = 1 //這里只有i在作用范圍內
    while (i <= 9) {
      var j = i //這里只有i和j在作用范圍內
      while (j <= 9) {
        val prod = (i * j).toString() //這里只有i和j和prod在作用范圍內
        var k = prod.length() //這里只有i和j和prod和k在作用范圍內
        while (k < 4) {
          print(" ")
          k += 1
        }
        print(i + "*" + j + "=" + prod)
        j += 1
      }
      // i和j讓在作用范圍內,但是k已經不在作用范圍內。
      println()
      i += 1
    }
    //i仍在范圍內,j,prod,和k脫離了范圍
  }

 執行的結果如下:

   1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9
   2*2=4   2*3=6   2*4=8  2*5=10  2*6=12  2*7=14  2*8=16  2*9=18
   3*3=9  3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27
  4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36
  5*5=25  5*6=30  5*7=35  5*8=40  5*9=45
  6*6=36  6*7=42  6*8=48  6*9=54
  7*7=49  7*8=56  7*9=63
  8*8=64  8*9=72
  9*9=81

發現是倒向的乘法口訣,

下面我們修改代碼打印一個正向的九九乘法表,關鍵在while(j <=i) 這個條件。

  /**
   * 打印正向的九九乘法表
   */
  def printMultiTable2() {
    var i = 1 //這里只有i在作用范圍內
    while (i <= 9) {
      var j = 1 //這里只有i和j在作用范圍內
      while (j <= i) {
        val prod = (i * j).toString() //這里只有i和j和prod在作用范圍內
        var k = prod.length() //這里只有i和j和prod和k在作用范圍內
        while (k < 4) {
          print(" ")
          k += 1
        }
        print(j + "*" + i + "=" + prod)
        j += 1
      }
      // i和j讓在作用范圍內,但是k已經不在作用范圍內。
      println()
      i += 1
    }
    //i仍在范圍內,j,prod,和k脫離了范圍
  }

執行結果如下:

   1*1=1
   1*2=2   2*2=4
   1*3=3   2*3=6   3*3=9
   1*4=4   2*4=8  3*4=12  4*4=16
   1*5=5  2*5=10  3*5=15  4*5=20  5*5=25
   1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
   1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
   1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
   1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

 

scala的語法簡潔性,和函數式的風格,我們可以使用函數風格實現該功能發現代碼量會減少很多,邏輯也更加清晰:

源碼如下:

  //打印:打印乘法口訣發
  def makeRowSeq(row: Int) =
    for (col <- 1 to row) yield {
      val prod = (row * col).toString()
      val padding = " " * (4 - prod.length())
      col + "*" + row + "=" + prod + padding
    }
  def makeRow(row: Int) = makeRowSeq(row).mkString
  /*函數風格的編程實現九九乘法表*/
  def multiTable() = {
    val tableSeq = for (row <- 1 to 9) yield makeRow(row)
    println(tableSeq.mkString("\n"))
  }

 執行結果如下:

1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81 

 

使用scala的for循環嵌套的方式實現該功能,代碼可以更加簡潔,只需要5,6行代碼即可實現,

充分體現了scala的語言的強大性。

  def multiTable2() = {
    for(row <- 1 to 9 ; col <- 1 to row){
      val prod = (row * col).toString()
      val padding = " " * (4 - prod.length())
      print(col + "*" + row + "=" + prod + padding)
      if(row == col) println()
    }
  }

 執行結果如下:

1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81 

 

可以使用for嵌套循環和scala的s()方法,使實現更加簡單,scala果然博大精深,

源碼如下:

  def multiTable3 = {
    (
      for (
        i <- 1 to 9;
        j <- 1 to i;
        ss = s"$j*$i=${i * j}\t"
      ) yield {
        if (j == i) s"$ss\n" else ss
      }).foreach(print);
  }

 執行結果如下:

1*1=1    
1*2=2    2*2=4    
1*3=3    2*3=6    3*3=9    
1*4=4    2*4=8    3*4=12    4*4=16    
1*5=5    2*5=10    3*5=15    4*5=20    5*5=25    
1*6=6    2*6=12    3*6=18    4*6=24    5*6=30    6*6=36    
1*7=7    2*7=14    3*7=21    4*7=28    5*7=35    6*7=42    7*7=49    
1*8=8    2*8=16    3*8=24    4*8=32    5*8=40    6*8=48    7*8=56    8*8=64    
1*9=9    2*9=18    3*9=27    4*9=36    5*9=45    6*9=54    7*9=63    8*9=72    9*9=81   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM