Scala编程之螺旋
一、概述
今天在《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编程之螺旋相关推荐
- 大数据Scala编程.问题集(02)
大数据Scala编程.问题集(02) by 高焕堂 洞庭国际智能硬件检测基地 & 中云大数据中心(IDC) 首席架构师 微博:@高焕堂_台北 Q-02: Scala语言的trait具有什么设计 ...
- scala编程_Scala编程语言简介
scala编程 Scala is a programming language that integrates the object oriented and functional language ...
- Hbase table CRUD操作及scala编程
Hbase shell操作 1) 插入数据:put只能插入一个单元格 指定 表名.行键.列名.列值.[时间戳] hbase(main):081:0> put 'ns3:emp','rk0001' ...
- spinal HDL - 01 - 环境搭建与Scala编程指南
写在前面 SpinalHDL这个语言,我是在了解了香山处理器Chisel才知道的,一直想用一用,SpinalHDL和Chisel师承一脉,都是基于Scala来进行电路描述.其本质上仍旧是HDL而非HL ...
- Scala编程——下界介绍与实例分析
最近又在重温Scala编程.上bilibili网站看了韩顺平老师在尚硅谷的Scala编程语言的教学视频.发现韩老师有关Scala下界的介绍与示例说明,讲解的不是很清晰.并认为可能会给一些学习Scala ...
- scala编程_Scala可以带回编程的喜悦吗?
scala编程 编程不再有趣. 这是开发人员Eric Allman在他最新的博客文章中声称的,他继续抱怨说,如今Java开发人员的许多工作包括单调地将库,集成框架,重构,测试和部署现有代码组成. 埃里 ...
- 【图文详细 】Scala——编程练习
6.Scala 编程练习 6.1.99 乘法表 package com.mazh.scala.funny object Table99 { def main(args: Array[String]) ...
- Scala编程基础——集合高阶函数
Scala编程基础--集合&高阶函数 集合 Scala中集合分为可变集合和不可变集合 可变集合:可以修改.添加.移除一个集合的元素. 不可变集合:安全的并发访问. 不可变集合,相比之下,永远不 ...
- Scala编程初级实践-统计学生成绩
Scala编程初级实践 统计学生成绩 学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号.性别.课程名1.课程名2等,后面每一行代表一个学生的信息,各字段之间用空白符隔开 Id gende ...
最新文章
- 缺陷漏测分析:测试过程改进
- springboot学习笔记(三)
- EncodeUtil
- html如何改变浏览器的图标,css 更换浏览器 默认图标
- 来自内蒙古草原的摇滚歌手
- 【dfs】通行证(jzoj 2013)
- 登录id 黑苹果_黑苹果MacOSCatalina无法登录AppStore修复
- 当 Egg 遇到 TypeScript,收获茶叶蛋一枚 #27
- 直播预告丨原厂专家解析MySQL的性能管理
- C#开发命令执行驱动程序 之 控制标志的命令行参数
- 实现Android 动态载入APK(Fragment or Activity实现)
- java if else 过多_Java利用策略模式优化过多if else代码
- 用pyqt5做一个能python程序能插入图片的ide
- http请求出现406错误解决方案
- Android webview监听网页对话框点击事件
- Studio 3T for MongoDB
- SCCM 2012 R2部署,SCCM配置(五)
- oracle lead() over,Oracle数据库之lead over 和 lag over
- STM32CubeMX学习笔记(25)——FatFs文件系统使用(操作SPI Flash)
- 南京审计计算机高考收分多少,南京审计大学2019年高考在各省的投档分数线是多少...