Scala学习(五)练习
|
Scala中的类&练习 |
1. 改进Counter类,让它不要在Int.MaxValue时变成负数
程序代码:
- class Counter {
- private var value=100
- def increment(){
- if(value<Int.MaxValue)
- value+=1
- else
- value
- }
- def current=value
- }
- object Counter{
- def main(args: Array[String]): Unit = {
- val max=Int.MaxValue
- println("Int类型的最大值:"+max)
- val counter=new Counter
- for(i <- 1 to (max))
- counter.increment()
- println("经过"+max+"增加后Value值为:"+counter.current)
- }
- }
运行结果:
Int类型的最大值:2147483647
增加后Value值为:2147483647
2. 编写一个BankAccount类,加入deposit和withdraw方法,和一个只读的balance属性
程序代码:
- class BankAccount {
- private var balance=0.0
- def deposit(depamount:Double){
- balance+=depamount
- }
- def withdraw(drawamount:Double){
- balance-=drawamount
- }
- def current=balance
- }
- object BankAccount{
- def main(args: Array[String]): Unit = {
- val Drawamount=800
- val Depamount=1000
- val acc=new BankAccount
- println("存入金额:"+Depamount)
- acc.deposit(Depamount)
- println("余额:"+acc.current)
- println("取出金额:"+Drawamount)
- acc.withdraw(Drawamount)
- println("余额为:"+acc.current)
- }
- }
运行结果:
存入金额:1000
余额:1000.0
取出金额:800
余额为:200.0
3. 编写一个Time类,加入只读属性hours和minutes,和一个检查某一时刻是否早于另一时刻的方法 before(other:Time):Boolean。Time对象应该以new Time(hrs,min)方式构建。其中hrs以军用时间格式呈现(介于0和23之间)
程序代码:
- class Time(val hours:Int , val minutes:Int) {
- def before(other:Time):Boolean={
- hours<other.hours||(hours==other.hours&&minutes<other.minutes)
- }
- override def toString():String={
- hours+":"+minutes
- }
- }
- object Time{
- def main(args: Array[String]): Unit = {
- val t1=new Time(10,30)
- val t2=new Time(10,50)
- val t3=new Time(11,10)
- println("t1时刻是:"+t1.toString())
- println("t2时刻是:"+t2.toString())
- println("t3时刻是:"+t3.toString())
- println("t1时刻早于t2吗:"+t1.before(t2))
- println("t3时刻早于t2吗:"+t3.before(t2))
- }
- }
运行结果:
t1时刻是:10:30
t2时刻是:10:50
t3时刻是:11:10
t1时刻早于t2吗:true
t3时刻早于t2吗:false
4. 重新实现前一个类中的Time类,将内部呈现改成午夜起的分钟数(介于0到24*60-1之间)。不要改变公有接口。也就是说,客户端代码不应因你的修改而受影响
程序代码:
- class NewTime(val hours:Int,val minutes:Int) {
- def before(other:NewTime):Boolean={
- hours < other.hours||(hours==other.hours&&minutes<other.minutes)
- }
- override def toString():String={
- hours*60+""+minutes
- }
- }
- object NewTime{
- def main(args: Array[String]): Unit = {
- val t1=new NewTime(10,30)
- val t2=new NewTime(10,50)
- val t3=new NewTime(11,10)
- println("t1时刻:"+t1.toString())
- println("t2时刻:"+t2.toString())
- println("t3时刻:"+t3.toString())
- println("t1时刻比t2早吗:"+t1.before(t2))
- println("t3时刻比t2早吗:"+t3.before(t2))
- }
- }
运行结果:
t1时刻:60030
t2时刻:60050
t3时刻:66010
t1时刻比t2早吗:true
t3时刻比t2早吗:false
5. 创建一个Student类,加入可读写的JavaBeans属性name(类型为String)和id(类型为Long)。有哪些方法被生产?你可以在Scala中调用JavaBeans的getter和setter方法吗?应该这样做吗?
程序代码:
class Student {
var name:String=null
}
执行命令:javap -private Student
运行结果:

使用@BeanProperty增加兼容JavaBean的get和set方法:
import scala.beans.BeanProperty
class Student {
@BeanProperty
var name:String=null
@BeanProperty
}
执行命令: javap -private Student
运行结果:

6. 在Person类中提供一个主构造器,将负年龄转换为0
程序代码:
- class Person(var age:Int){
- if(age < 0) age=0
- }
- object Person{
- def main(args: Array[String]): Unit = {
- val age1 = 10
- val age2 = -20
- println("将Tom的年龄初始化为:"+age1)
- val Tom=new Person(age1)
- println("Tom的实际年龄为:"+Tom.age)
- println("将Tom的年龄初始化为:"+age2)
- val Jhon=new Person(age2)
- println("Jhon的实际年龄为:"+Jhon.age)
- }
- }
运行结果:
将Tom的年龄初始化为:10
Tom的实际年龄为:10
将Jhon的年龄初始化为:-20
Jhon的实际年龄为:0
7. 编写一个Person类,其主构造器接受一个字符串,该字符串包含名字,空格和姓名,如new Person("Fred Smith")。提供只读属性firstName和lastName。主构造器参数应该是var,val还是普通参数,为什么
描述:name应该设定为val以防止被修改
程序代码:
- class Person(val name:String) {
- private val namearr=name.split("")
- def FirstName=namearr(0)
- def LastName=namearr(1)
- }
- object Person{
- def main(args: Array[String]): Unit = {
- val person=new Person("Xinyu Jiang")
- //name参数自动转为私有字段,并生成公有getter
- println("person的名称为:"+person.name)
- println("person的FisrtName:"+person.FirstName)
- println("person的LastName:"+person.LastName)
- }
- }
运行结果:
person的名称为:Xinyu Jiang
person的FisrtName:Xinyu
person的LastName:Jiang
8. 创建一个Car类,以只读属性对应制造商,型号名称,型号年份以及一个可读写的属性用于车牌。提供四组构造器。每个构造器都要求制造商和型号为必填。型号年份和车牌可选,如果未填,则型号年份为-1,车牌为空串。你会选择哪一个作为你的主构造器,为什么
程序代码:
- class Car(val manufactor:String,val model:String=null,val year:String=null,var number:Int= -1){
- }
- object Car{
- def main(args: Array[String]): Unit = {
- val Chevrolet=new Car("通用","雪佛兰-爱唯欧")
- val Volkswagen=new Car("一汽","大众-斯柯达","2015-1-1")
- val Volvo=new Car("吉利","Volvo-s40","2015-1-2",666666)
- val nameArr=Array("雪佛兰","大众","沃尔沃")
- val carArr=Array(Chevrolet,Volkswagen,Volvo)
- Outinfo(nameArr,carArr)
- }
- def Outinfo(carName:Array[String],carArr:Array[Car])={
- for(i <- 0 until carName.length){
- println(carName(i))
- println("汽车制造商为: "+carArr(i).manufactor)
- println("汽车型号为: "+carArr(i).model)
- println("汽车产年份为: "+carArr(i).year)
- println("汽车车牌号为: "+carArr(i).number)
- }
- }
- }
运行结果:
雪佛兰
汽车制造商为: 通用
汽车型号为: 雪佛兰-爱唯欧
汽车产年份为: null
汽车车牌号为: -1
大众
汽车制造商为: 一汽
汽车型号为: 大众-斯柯达
汽车产年份为: 2015-1-1
汽车车牌号为: -1
沃尔沃
汽车制造商为: 吉利
汽车型号为: Volvo-s40
汽车产年份为: 2015-1-2
汽车车牌号为: 666666
9. 在Java,C#或C++重做前一个练习。Scala相比之下精简多少
程序代码:
- class JavaCar{
- private String manufactor;
- private String model;
- private String year;
- private int number;
- public JavaCar(){}
- public JavaCar(String manufactor,String model){
- this.manufactor=manufactor;
- this.model=model;
- this.year=null;
- this.number=-1;
- }
- public JavaCar(String manufactor,String model,String year){
- this.manufactor=manufactor;
- this.model=model;
- this.year=year;
- this.number=-1;
- }
- public JavaCar(String manufactor,String model,String year,int number){
- this.manufactor=manufactor;
- this.model=model;
- this.year=year;
- this.number=number;
- }
- public String getManufactor(){
- return this.manufactor;
- }
- public String getModel(){
- return this.model;
- }
- public String getYear(){
- return this.year;
- }
- public void setNumber(int number){
- this.number=number;
- }
- public int getNumber(){
- return number;
- }
- public static void main(String[] args) {
- }
- }
- public class CarTest{
- public static void main(String[] args) {
- JavaCar Chevrolet=new JavaCar("通用","雪佛兰-爱唯欧");
- JavaCar Volkswagen=new JavaCar("一汽","大众-斯柯达","2015-1-1");
- JavaCar Volvo=new JavaCar("吉利","Volvo-S40","2015-1-2",66666);
- String[] nameArr={"雪佛兰","大众","沃尔沃"};
- JavaCar[] carinfoArr={Chevrolet,Volkswagen,Volvo};
- CarTest cartest=new CarTest();
- cartest.OutInfo(nameArr,carinfoArr);
- }
- public void OutInfo(String[] nameArr,JavaCar[] carinfoArr){
- for(int i=0;i<nameArr.length;i++){
- System.out.println(nameArr[i]);
- System.out.println("汽车制造商: "+carinfoArr[i].getManufactor());
- System.out.println("汽车型号: "+carinfoArr[i].getModel());
- System.out.println("汽车年份: "+carinfoArr[i].getYear());
- System.out.print("车牌号: "+carinfoArr[i].getNumber());
- }
- }
- }
运行结果:
雪佛兰
汽车制造商: 通用
汽车型号: 雪佛兰-爱唯欧
汽车年份: null
车牌号: -1
大众
汽车制造商: 一汽
汽车型号: 大众-斯柯达
汽车年份: 2015-1-1
车牌号: -1
沃尔沃
汽车制造商: 吉利
汽车型号: Volvo-S40
汽车年份: 2015-1-2
车牌号: 66666
10. 考虑如下的类
class Employ(val name:String,var salary:Double){
def this(){ this ("John Q. Public",0.0) }
}
重写该类,使用显示的字段定义,和一个缺省主构造器。你更倾向于使用哪种形式,为什么
程序代码:
- class Employee(var name:String,var salary:Double){
- def this(){
- this("Jom Q. Public",0)
- }
- }
- object Employee{
- def main(args: Array[String]): Unit = {
- val ITemployee=new Employee
- val Bankemployee=new Employee("Tom Hanks",100000)
- println("ITemployee Name: "+ITemployee.name+" Salary: "+ITemployee.salary)
- println("Bankemployee Name: "+Bankemployee.name+" Salary: "+Bankemployee.salary)
- }
- }
运行结果:
ITemployee Name: Jom Q. Public Salary: 0.0
Bankemployee Name: Tom Hanks Salary: 100000.0
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Sunddenly】。本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Scala学习(五)练习的更多相关文章
- Scala学习(五)---Scala中的类
Scala中的类 摘要: 在本篇中,你将会学习如何用Scala实现类.如果你了解Java或C++中的类,你不会觉得这有多难,并且你会很享受Scala更加精简的表示法带来的便利.本篇的要点包括: 1. ...
- Scala学习五——类
一.本章要点 类中的字段自动带有getter方法和setter方法 你可以用定制的getter/setter方法替换掉字段的定义,而不必修改使用类的客户端——这就是所谓的”统一访问原则“ 用@Bean ...
- Scala学习资源
Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- TweenMax动画库学习(五)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- SVG 学习<五> SVG动画
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- 【Scala】Scala学习资料
Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...
- Scala学习网址
scala学习网址为:https://twitter.github.io/scala_school/zh_cn https://www.zhihu.com/question/26707124
随机推荐
- Expo大作战(三十八)--expo sdk api之 FileSystem(文件操作系统)
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Java:[面向对象:继承,多态]
本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类( ...
- scrapy系列(一)——Python 爬虫框架 Scrapy1.2 Windows 安装教程
scrapy作为一个成熟的爬虫框架,网上有大量的相关教程供大家选择,尤其是关于其的安装步骤更是丰富的很.在这里我想记录下自己的相关经验,希望能给大家带来点帮助. 在scrapy0.24版之前,安装sc ...
- python第十七天---时间模块、random模块
作完一个作业,开始新的学习: 有由今天的时间有限所有学习了以下两个模块,明天继续! 时间模块.random模块 import time #!usr/bin/env python #-*-coding: ...
- 如何使用C语言的面向对象
我们都知道,C++才是面向对象的语言,但是C语言是否能使用面向对象的功能? (1)继承性 typedef struct _parent { int data_parent; }Parent; type ...
- macOS 下NFS 文件系统挂载
主要有两种方式: 使用:resvport选项, mount 挂载命令时. 使用:insecure选项, exportfs 文件配置时. sudo mount -o resvport IP:Addr b ...
- 通信原理之OSI七层参考模型(一)
1.什么是计算机网络 谈计算机通信原理当然离不开计算机网络,那么什么是计算机网络.官方定义:计算机网络是由两台或两台以上的计算机通过网络设备连接起来所组成的一个系统,在这个系统中计算机与计算机之间可以 ...
- 4.1Python数据类型(1)之数值类型
返回总目录 目录: 1.数据类型的表现形式: 2.数据进制的转换: 3.数据的常规操作: (一).数据类型的表现形式: (1)整数类型: # 二进制: a = 0b0110 print("二 ...
- 建立标准编码规则(二)-DiagnosticAnalyzer 增加诊断分析代码
1.使用语法树 当我们要编写一个规则,例如 检测正值表达式的时候,如何编写有效的规则呢 Regex.Match("my text", @"\pXXX"); 这里 ...
- __iter___和__next__方法
__iter__方法变成一个迭代器类对象, 迭代器类要实现__next__方法