一、概述

今天在《Scala In Programming》中学习了关于Scala的组合与继承,下面通过一个实例作为知识的巩固。

二、实例展示

1、实例名称:

根据给定的边界值,画出一个螺旋。

2、实例描述:

a、首先给出四个类:Element、ArrayElement、UniformElement、LineElemnt,其中Element为抽象的超类,其余三个类分别继承于Element。

import scalaDemo.Element._/*** Created by user on 2016/1/18.*/
abstract class Element {def contents: Array[String]def height: Int = contents.lengthdef width: Int = contents(0).lengthdef above(that: Element): Element = {val thisParam = this widen that.widthval thatParam = that widen this.widthelem(thisParam.contents ++ thatParam.contents)}def beside(that: Element): Element = {val thisParam = this highten that.heightval thatParam = that highten this.heightelem(for((line1,line2) <- thisParam.contents zip thatParam.contents)yield line1 + line2)}def widen(w: Int): Element = {if(w <= width) this else{val left = elem(' ',(w - width)/2,height)val right = elem(' ', w - width - left.width, height)left beside this beside right}}def highten(h: Int): Element = {if(h <= height){this}else{val top = elem(' ', width, (h - height)/2)val bot = elem(' ', width, h - height - top.height)top above this above bot}}override def toString = contents.mkString("\n")
}
/*** Created by user on 2016/1/18.*/
class ArrayElement(contentsParam: Array[String]) extends Element{override def contents: Array[String] = {contentsParam}
}
/*** Created by user on 2016/1/18.*/
class UniformElement(char: Char, width: Int, height: Int) extends Element{private val line = char.toString * widthoverride def contents: Array[String] = {Array.apply(line + ": " + height)}
}
/*** Created by user on 2016/1/18.*/
class LineElement(line: String) extends Element{override def contents: Array[String] = {Array.apply(line)}
}

b、定义一个object:Element

import scalaDemo.classes.{ArrayElement, LineElement, UniformElement, Element}/*** Created by user on 2016/1/18.*/
object Element {def elem(contents: Array[String]): Element = {new ArrayElement(contents)}def elem(char: Char, width: Int, height: Int): Element = {new UniformElement(char,width,height)}def elem(line: String): Element = {new LineElement(line)}
}

c、测试实例

import scalaDemo.Element.elem
import scalaDemo.classes.Element/*** Created by user on 2016/1/18.*/
object Spiral{val space = elem(" ")val corner = elem("+")def spiral(edges: Int, direction: Int): Element = {if(edges == 1){elem("+")}else{val sp = spiral(edges - 1, (direction + 3) % 4)def verticalBar = elem('|',1,sp.height)def horizontalBar = elem('-',sp.width,1)if(direction == 0){(corner beside horizontalBar) above (sp beside space)}else if(direction == 1){(sp above space) beside (corner above verticalBar)}else if(direction == 2){(space beside sp) above (horizontalBar beside corner)}else{(verticalBar above corner) beside (space above sp)}}}def main (args: Array[String]) {val constents = new Array[String](3)constents(0) = "AAAAAAA" + ","constents(1) = "BBBBBBB" + ","constents(2) = "CCCCCCC"println(spiral(constents.length,3))}
}

三、测试结果

请查看附件中的图片

Scala编程之螺旋相关推荐

  1. 大数据Scala编程.问题集(02)

    大数据Scala编程.问题集(02) by 高焕堂 洞庭国际智能硬件检测基地 & 中云大数据中心(IDC) 首席架构师 微博:@高焕堂_台北 Q-02: Scala语言的trait具有什么设计 ...

  2. scala编程_Scala编程语言简介

    scala编程 Scala is a programming language that integrates the object oriented and functional language ...

  3. Hbase table CRUD操作及scala编程

    Hbase shell操作 1) 插入数据:put只能插入一个单元格 指定 表名.行键.列名.列值.[时间戳] hbase(main):081:0> put 'ns3:emp','rk0001' ...

  4. spinal HDL - 01 - 环境搭建与Scala编程指南

    写在前面 SpinalHDL这个语言,我是在了解了香山处理器Chisel才知道的,一直想用一用,SpinalHDL和Chisel师承一脉,都是基于Scala来进行电路描述.其本质上仍旧是HDL而非HL ...

  5. Scala编程——下界介绍与实例分析

    最近又在重温Scala编程.上bilibili网站看了韩顺平老师在尚硅谷的Scala编程语言的教学视频.发现韩老师有关Scala下界的介绍与示例说明,讲解的不是很清晰.并认为可能会给一些学习Scala ...

  6. scala编程_Scala可以带回编程的喜悦吗?

    scala编程 编程不再有趣. 这是开发人员Eric Allman在他最新的博客文章中声称的,他继续抱怨说,如今Java开发人员的许多工作包括单调地将库,集成框架,重构,测试和部署现有代码组成. 埃里 ...

  7. 【图文详细 】Scala——编程练习

    6.Scala 编程练习 6.1.99 乘法表  package com.mazh.scala.funny object Table99 { def main(args: Array[String]) ...

  8. Scala编程基础——集合高阶函数

    Scala编程基础--集合&高阶函数 集合 Scala中集合分为可变集合和不可变集合 可变集合:可以修改.添加.移除一个集合的元素. 不可变集合:安全的并发访问. 不可变集合,相比之下,永远不 ...

  9. Scala编程初级实践-统计学生成绩

    Scala编程初级实践 统计学生成绩 学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号.性别.课程名1.课程名2等,后面每一行代表一个学生的信息,各字段之间用空白符隔开 Id gende ...

最新文章

  1. 缺陷漏测分析:测试过程改进
  2. springboot学习笔记(三)
  3. EncodeUtil
  4. html如何改变浏览器的图标,css 更换浏览器 默认图标
  5. 来自内蒙古草原的摇滚歌手
  6. 【dfs】通行证(jzoj 2013)
  7. 登录id 黑苹果_黑苹果MacOSCatalina无法登录AppStore修复
  8. 当 Egg 遇到 TypeScript,收获茶叶蛋一枚 #27
  9. 直播预告丨原厂专家解析MySQL的性能管理
  10. C#开发命令执行驱动程序 之 控制标志的命令行参数
  11. 实现Android 动态载入APK(Fragment or Activity实现)
  12. java if else 过多_Java利用策略模式优化过多if else代码
  13. 用pyqt5做一个能python程序能插入图片的ide
  14. http请求出现406错误解决方案
  15. Android webview监听网页对话框点击事件
  16. Studio 3T for MongoDB
  17. SCCM 2012 R2部署,SCCM配置(五)
  18. oracle lead() over,Oracle数据库之lead over 和 lag over
  19. STM32CubeMX学习笔记(25)——FatFs文件系统使用(操作SPI Flash)
  20. 南京审计计算机高考收分多少,南京审计大学2019年高考在各省的投档分数线是多少...

热门文章

  1. 配置文件——节点machineKey的作用,强随机生成
  2. 基于ArkUI开发框架,图片马赛克处理的实现
  3. 联想小新进入BIOS
  4. 好员工的十个标准[精]
  5. java删除cookie信息_java如何设置和删除cookie
  6. 如何在线将PDF转成图片
  7. GWJDN-1000型宽频高温介电测量系统
  8. HTML(超文本标记语言)介绍
  9. SQL自定义排序规则
  10. 【删除数组中重复的元素】