快学Scala 第6章 对象 - 练习
1. 编写一个Conversions对象,加入inchesToCentimeters、gallonsToLiters和milesToKilometers方法。
object
Conversions {
def
main(args
:
Array[String]){
printf(
"1 inch = %g centimeters\n"
, inchesToCentimeters(
1
))
printf(
"2 gallons = %g liters\n"
, gallonsToLiters(
2
))
printf(
"3 miles = %g centimeters\n"
, milesToKilometers(
3
))
}
def
inchesToCentimeters(inches
:
Double)
=
{
inches *
2.54
}
def
gallonsToLiters(gallons
:
Double)
=
{
gallons *
3.7854118
}
def
milesToKilometers(miles
:
Double)
=
{
miles *
1.609344
}
}
/*result
1 inch = 2.54000 centimeters
2 gallons = 7.57082 liters
3 miles = 4.82803 centimeters
*/
abstract
class
UnitConversions{
def
convert(amt
:
Double)
:
Double
}
object
inchesToCentimeters
extends
UnitConversions{
override
def
convert(amt
:
Double)
=
amt *
2.54
}
object
gallonsToLiters
extends
UnitConversions{
override
def
convert(amt
:
Double)
=
amt *
3.7854118
}
object
milesToKilometers
extends
UnitConversions{
override
def
convert(amt
:
Double)
=
amt *
1.609344
}
printf(
"1 inch = %g centimeters\n"
, inchesToCentimeters.convert(
1
))
printf(
"2 gallons = %g liters\n"
, gallonsToLiters.convert(
2
))
printf(
"3 miles = %g centimeters\n"
, milesToKilometers.convert(
3
))
/*result
1 inch = 2.54000 centimeters
2 gallons = 7.57082 liters
3 miles = 4.82803 centimeters
*/
import
java.awt.
_
object
Origin
extends
Point{
override
def
getLocation
:
Point
=
super
.getLocation
}
Origin.move(
2
,
3
)
println(Origin.toString)
/*result
Main$$anon$1$Origin$[x=2,y=3]
*/
class
Point
private
(
val
x
:
Int,
val
y
:
Int){
override
def
toString
=
"Point at [x=%d,y=%d]"
.format(x,y)
}
object
Point{
def
apply(x
:
Int, y
:
Int)
=
new
Point(x,y)
}
val
a
=
Point(
3
,
4
)
println(a.toString)
/*result
Point at [x=3,y=4]
*/
object
Reverse{
def
main(args
:
Array[String]){
for
(i <- (
0
until args.length).reverse) print(args(i) +
" "
)
}
}
/* The following code did not work for me.
object Reverse extends App{
for(i <- (0 until args.length).reverse) print(args(i) + " ")
}
*/
/*result
World Hello
*/
object
Poker
extends
Enumeration
with
App{
val
Heart
=
Value(
3
,
"
♥"
)
val
Diamond
=
Value(
4
,
"
♦"
)
val
Club
=
Value(
5
,
"
♣"
)
val
Spade
=
Value(
6
,
"
♠"
)
println(Poker.Heart)
println(Poker.Diamond)
println(Poker.Club)
println(Poker.Spade)
}
object
Card
extends
Enumeration
with
App{
val
Heart
=
Value(
3
,
""
)
val
Diamond
=
Value(
4
,
""
)
val
Club
=
Value(
5
,
""
)
val
Spade
=
Value(
6
,
""
)
def
color(c
:
Card.Value){
if
(c
==
Card.Club || c
==
Card.Spade) print(
"Black"
)
else
print(
"Red"
)
}
color(Card.Heart)
}
/*
Red
*/
object
RGB
extends
Enumeration
with
App{
val
RED
=
Value(
0xff0000
,
"Red"
)
val
BLACk
=
Value(
0x000000
,
"Black"
)
val
GREEN
=
Value(
0x00ff00
,
"Green"
)
val
CYAN
=
Value(
0x00ffff
,
"Cyan"
)
val
YELLO
=
Value(
0xffff00
,
"Yellow"
)
val
WHITE
=
Value(
0xffffff
,
"White"
)
val
BLUE
=
Value(
0x0000ff
,
"Blue"
)
val
MAGENTA
=
Value(
0xff00ff
,
"Magenta"
)
}
快学Scala 第6章 对象 - 练习的更多相关文章
- 《快学Scala》第二章 控制结构和函数
- 《快学Scala》第一章 基础
- 快学Scala习题解答—第一章 基础
1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on th ...
- 《快学Scala》
Robert Peng's Blog - https://mr-dai.github.io/ <快学Scala>Intro与第1章 - https://mr-dai.github.io/S ...
- 快学Scala 第十九课 (trait的abstract override使用)
trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super ...
- 快学Scala 第十三课 (类型层级,对象相等性)
Scala 类型层级: 对象相等性: 和Java一样要重写equals方法和hashcode方法 class Student(val id: Int, val name: String) { over ...
- 《快学Scala》第六章 对象 第七章 包和引入
- 快学Scala习题解答—第四章 映射和元组
4 映射和元组 4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折 映射的简单操作 ,"gun"->18 ...
- 快学scala习题解答--第五章 类
5 类 5.1 改进5.1节的Counter类,让它不要在Int.MaxValue时变成负数 class Count{ private var value = Int.MaxValue else v ...
随机推荐
- APK优化工具zipalign的详细介绍和使用
什么是Zipalign? Zipalign是一个android平台上整理APK文件的工具,它首次被引入是在Android 1.6版本的SDK软件开发工具包中.它能够对打包的Android应用 ...
- 流媒体之HLS——综述
[时间:2018-01] [状态:Open] [关键词:流媒体,stream,HLS] 0 HLS背景及初衷 HLS是由苹果公司发起的流媒体网络传输协议,可参考rfc8261 HTTP Live St ...
- 【转】【WPF】WPF中的Button的MouseDown事件不触发问题
按照WPF的帮助说明,某些控件的路由事件被内部处理了,已经被标记为Handled,自行定义的事件处理代码便不再起作用了,有时候会很郁闷! 不过WPF提供了必要的方法. 1)使用相应的Preview事件 ...
- 安装 VMWare ESXi 6.7:VMB: 548: Unsupported CPU:6.7版本的ESXi 不支持 某些cpu了
如题,谨记! 升级是双面刃! 用6.5--版本,即可.
- 解决ubuntu下音乐播放器Rhythmbox乱码问题
两种解决方法 第一种是修改用户的环境变量 1.先打开主文件夹 cd /home/user #user是你的用户名然后编辑用户环境 2.sudo gedit .profile在打开的文件中添加: exp ...
- 基金 、社保和QFII等机构的重仓股排名评测
基金前15大重仓股持仓股排名 基金重仓前15大个股,相较于同期沪深300的平均收益, 近1月:2.45%, 近3月:10.0%, 近1年:11.22%, 近3年:105.23%. 1,中国平安(SH6 ...
- VS2013-2017 舒服的字体设置和背景色
使用字体:Fixedsys Excelsior 3.01 1.如果没有安装字体的话,首先下载字体:http://www.fixedsysexcelsior.com/ 2.安装字体:控制面板 -> ...
- 手写一个selenium浏览器池
维护一组浏览器,实现每分钟1000次查询.DriverPool使用变幻版只初始化一次的单例模式.维护每个浏览器的当前是否使用的状态. 不需要等待请求来了,临时开浏览器,开一个浏览器会耽误6秒钟. 可以 ...
- HTTP 请求头 WIKI 地址
https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
- Eclipse 左侧树形展示字体调节
eclipse中项目导航字体大小由配置文件中的设置决定 1.配置文件:找到eclipse安装位置(或解压路径): eclipse\plugins\org.eclipse.ui.themes_1.2.0 ...