使用scala打印九九乘法表,可以有多种实现方法,实现的过程充分的体现的scala语言的优势和巨大的简洁性和高效性,

下面我用了5种方法实现九九乘法表。

使用类似于java,c++等指令风格的的编程实现,源码如下:

  1. //这里打印倒向九九乘法口诀表
  2. /*指令风格的编程实现九九乘法表*/
  3. def printMultiTable() {
  4. var i = 1 //这里只有i在作用范围内
  5. while (i <= 9) {
  6. var j = i //这里只有i和j在作用范围内
  7. while (j <= 9) {
  8. val prod = (i * j).toString() //这里只有i和j和prod在作用范围内
  9. var k = prod.length() //这里只有i和j和prod和k在作用范围内
  10. while (k < 4) {
  11. print(" ")
  12. k += 1
  13. }
  14. print(i + "*" + j + "=" + prod)
  15. j += 1
  16. }
  17. // i和j让在作用范围内,但是k已经不在作用范围内。
  18. println()
  19. i += 1
  20. }
  21. //i仍在范围内,j,prod,和k脱离了范围
  22. }

执行的结果如下:

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) 这个条件。

  1. /**
  2. * 打印正向的九九乘法表
  3. */
  4. def printMultiTable2() {
  5. var i = 1 //这里只有i在作用范围内
  6. while (i <= 9) {
  7. var j = 1 //这里只有i和j在作用范围内
  8. while (j <= i) {
  9. val prod = (i * j).toString() //这里只有i和j和prod在作用范围内
  10. var k = prod.length() //这里只有i和j和prod和k在作用范围内
  11. while (k < 4) {
  12. print(" ")
  13. k += 1
  14. }
  15. print(j + "*" + i + "=" + prod)
  16. j += 1
  17. }
  18. // i和j让在作用范围内,但是k已经不在作用范围内。
  19. println()
  20. i += 1
  21. }
  22. //i仍在范围内,j,prod,和k脱离了范围
  23. }

执行结果如下:

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的语法简洁性,和函数式的风格,我们可以使用函数风格实现该功能发现代码量会减少很多,逻辑也更加清晰:

源码如下:

  1. //打印:打印乘法口诀发
  2. def makeRowSeq(row: Int) =
  3. for (col <- 1 to row) yield {
  4. val prod = (row * col).toString()
  5. val padding = " " * (4 - prod.length())
  6. col + "*" + row + "=" + prod + padding
  7. }
  8. def makeRow(row: Int) = makeRowSeq(row).mkString
  9. /*函数风格的编程实现九九乘法表*/
  10. def multiTable() = {
  11. val tableSeq = for (row <- 1 to 9) yield makeRow(row)
  12. println(tableSeq.mkString("\n"))
  13. }

执行结果如下:

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的语言的强大性。

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

执行结果如下:

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果然博大精深,

源码如下:

  1. def multiTable3 = {
  2. (
  3. for (
  4. i <- 1 to 9;
  5. j <- 1 to i;
  6. ss = s"$j*$i=${i * j}\t"
  7. ) yield {
  8. if (j == i) s"$ss\n" else ss
  9. }).foreach(print);
  10. }

执行结果如下:

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打印九九乘法表的5种实现的更多相关文章

  1. python中打印金字塔和九九乘法表的几种方法

    # 打印九九乘法表for i in range(1,10): for j in range(1,i+1): # x=i*j # print(i,'*',j,'=',x,end=' ') print(' ...

  2. 利用Python循环(包括while&for)各种打印九九乘法表

    一.for循环打印九九乘法表 #注意:由于缩进在浏览器不好控制,请大家见谅,后续会有图片传入. 1.1 左下角 for i in range(1,10): for j in range(1,i+1): ...

  3. oracle数据库如何打印九九乘法表

    对于九九乘法表,相信对于懂IT的人并不陌生,但是外行可能会有很多的不懂,c语言也同样需要了解,它是学习的入门课程,oracle数据库书写九九乘法表有好几种方式,下面就有我为大家介绍,一起来看看吧. 九 ...

  4. C#打印九九乘法表

    C#打印九九乘法表... ---------------------------------- using System; using System.Collections.Generic; usin ...

  5. PHP 九九乘法表的4种表达方式

    九九乘法表的四种不同表现形式 x轴对称: //第一种 for($i=1;$i<=9;$i++){ for($j=1;$j<=$i;$j++) { echo $i.'x'.$j.'='.$i ...

  6. 写一个方法,用一个for循环打印九九乘法表

    public class MultiplicationTable { /**  * @description 写一个方法,用一个for循环打印九九乘法表   * @author  wangkun  * ...

  7. python脚本7_打印九九乘法表

    #打印九九乘法表 for i in range(1,10): s = "" for j in range(1,i+1): s += str(j) + '*' + str(i) + ...

  8. python—用for循环、while循环和一句话打印九九乘法表

    用for循环打印九九乘法表: for i in range (1,10): for j in range(1,10): print(j,"x",i,"=",i* ...

  9. 【Java】Java_15 打印九九乘法表

    使用For循环嵌套即可打印九九乘法表 以下是具体代码: /** * 打印九九乘法表 */ package com.oliver.test; public class TestMultiplicatio ...

随机推荐

  1. win32 Ui 编程 收集

    ---恢复内容开始--- windows sdk编程系列---- 通用控件 http://www.cnblogs.com/MoreNotepad-plus-plus/articles/3164534. ...

  2. MyBatis关联查询分页

    背景:单表好说,假如是MySQL的话,直接limit就行了. 对于多对多或者一对多的情况,假如分页的对象不是所有结果集,而是对一边分页,那么可以采用子查询分页,再与另外一张表关联查询,比如: sele ...

  3. linux string 操作

    http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html 字符替换 sed -i 's/3306/3308/g' my.cnf my ...

  4. Codefroces Gym 100781A(树上最长路径)

    http://codeforces.com/gym/100781/attachments 题意:有N个点,M条边,问对两两之间的树添加一条边之后,让整棵大树最远的点对之间的距离最近,问这个最近距离是多 ...

  5. 20145227《Java程序设计》第10周学习总结

    20145227<Java程序设计>第10周学习总结 教材学习内容总结 网络编程 就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收 ...

  6. Code(组合数学)

    Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8766 Accepted: 4168 Description Tran ...

  7. Python学习笔记-Day1-Python基础

    1.python诞生 关于Python的起源,吉多·范罗苏姆在1996年写到: 六 年前,在1989年12月,我在寻找一门“课余”编程项目来打发圣诞节前后的时间.我的办公室会关门,但我有一台家用电脑, ...

  8. UVa 489,紫书P79,刽子手游戏

    题目链接:https://uva.onlinejudge.org/external/4/489.pdf 这个题很像之前的一个拓扑排序的题目,思路类似咯. 程序模块化: 每次判断一个字母,lose,wi ...

  9. Jenkins构建Git manager服务器的源码

    1,下载scm manager 源码库管理,下载后解压即可: 2,运行bin目录下的scm-server.bat文件,启动服务: 3,建议将scm-server放在git客户端的安装目录下,方便管理 ...

  10. C/C++通过WMI和系统API函数获取获取系统硬件配置信息

    转载:http://www.cnblogs.com/renyuan/archive/2012/12/29/2838716.html 转载:http://blog.csdn.net/jhqin/arti ...