Scala中的类&练习

1. 改进Counter类,让它不要在Int.MaxValue时变成负数

程序代码:

  1. class Counter {
  2.   private var value=100
  3.   def increment(){
  4.     if(value<Int.MaxValue)
  5.       value+=1
  6.     else
  7.       value
  8.   }
  9.   def current=value
  10. }
  11. object Counter{
  12.   def main(args: Array[String]): Unit = {
  13.     val max=Int.MaxValue
  14.     println("Int类型的最大值:"+max)
  15.     val counter=new Counter
  16.     for(i <- 1 to (max))
  17.       counter.increment()
  18.     println("经过"+max+"增加后Value值为:"+counter.current)
  19.   }
  20. }

运行结果:

Int类型的最大值:2147483647

增加后Value值为:2147483647

2. 编写一个BankAccount类,加入deposit和withdraw方法,和一个只读的balance属性

程序代码:

  1. class BankAccount {
  2.   private var balance=0.0
  3.   def deposit(depamount:Double){
  4.     balance+=depamount
  5.   }
  6.   def withdraw(drawamount:Double){
  7.     balance-=drawamount
  8.   }
  9.   def current=balance
  10. }
  11. object BankAccount{
  12.   def main(args: Array[String]): Unit = {
  13.     val Drawamount=800
  14.     val Depamount=1000
  15.     val acc=new BankAccount
  16.     println("存入金额:"+Depamount)
  17.     acc.deposit(Depamount)
  18.     println("余额:"+acc.current)
  19.     println("取出金额:"+Drawamount)
  20.     acc.withdraw(Drawamount)
  21.     println("余额为:"+acc.current)
  22.   }
  23. }

运行结果:

存入金额:1000

余额:1000.0

取出金额:800

余额为:200.0

3. 编写一个Time类,加入只读属性hours和minutes,和一个检查某一时刻是否早于另一时刻的方法 before(other:Time):Boolean。Time对象应该以new Time(hrs,min)方式构建。其中hrs以军用时间格式呈现(介于0和23之间)

程序代码:

  1. class Time(val hours:Int , val minutes:Int) {
  2.   def before(other:Time):Boolean={
  3.     hours<other.hours||(hours==other.hours&&minutes<other.minutes)
  4.   }
  5.   override def toString():String={
  6.     hours+":"+minutes
  7.   }
  8. }
  9. object Time{
  10.   def main(args: Array[String]): Unit = {
  11.     val t1=new Time(10,30)
  12.     val t2=new Time(10,50)
  13.     val t3=new Time(11,10)
  14.     println("t1时刻是:"+t1.toString())
  15.     println("t2时刻是:"+t2.toString())
  16.     println("t3时刻是:"+t3.toString())
  17.     println("t1时刻早于t2吗:"+t1.before(t2))
  18.     println("t3时刻早于t2吗:"+t3.before(t2))
  19.   }
  20. }

运行结果:

t1时刻是:10:30

t2时刻是:10:50

t3时刻是:11:10

t1时刻早于t2吗:true

t3时刻早于t2吗:false

4. 重新实现前一个类中的Time类,将内部呈现改成午夜起的分钟数(介于0到24*60-1之间)。不要改变公有接口。也就是说,客户端代码不应因你的修改而受影响

程序代码:

  1. class NewTime(val hours:Int,val minutes:Int) {
  2.   def before(other:NewTime):Boolean={
  3.     hours < other.hours||(hours==other.hours&&minutes<other.minutes)
  4.   }
  5.   override def toString():String={
  6.     hours*60+""+minutes
  7.   }
  8. }
  9. object NewTime{
  10.   def main(args: Array[String]): Unit = {
  11.       val t1=new NewTime(10,30)
  12.       val t2=new NewTime(10,50)
  13.       val t3=new NewTime(11,10)
  14.       println("t1时刻:"+t1.toString())
  15.       println("t2时刻:"+t2.toString())
  16.       println("t3时刻:"+t3.toString())
  17.       println("t1时刻比t2早吗:"+t1.before(t2))
  18.       println("t3时刻比t2早吗:"+t3.before(t2))
  19.   }
  20. }

运行结果:

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

程序代码:

  1. class Person(var age:Int){
  2.   if(age < 0) age=0
  3. }
  4. object Person{
  5.   def main(args: Array[String]): Unit = {
  6.     val age1 = 10
  7.     val age2 = -20
  8.  
  9.     println("将Tom的年龄初始化为:"+age1)
  10.     val Tom=new Person(age1)
  11.     println("Tom的实际年龄为:"+Tom.age)
  12.  
  13.     println("将Tom的年龄初始化为:"+age2)
  14.     val Jhon=new Person(age2)
  15.     println("Jhon的实际年龄为:"+Jhon.age)
  16.   }
  17. }

运行结果:

将Tom的年龄初始化为:10

Tom的实际年龄为:10

将Jhon的年龄初始化为:-20

Jhon的实际年龄为:0

7. 编写一个Person类,其主构造器接受一个字符串,该字符串包含名字,空格和姓名,如new Person("Fred Smith")。提供只读属性firstName和lastName。主构造器参数应该是var,val还是普通参数,为什么

描述:name应该设定为val以防止被修改

程序代码:

  1. class Person(val name:String) {
  2.   private val namearr=name.split("")
  3.   def FirstName=namearr(0)
  4.   def LastName=namearr(1)
  5. }
  6. object Person{
  7.   def main(args: Array[String]): Unit = {
  8.     val person=new Person("Xinyu Jiang")
  9.     //name参数自动转为私有字段,并生成公有getter
  10.     println("person的名称为:"+person.name)
  11.     println("person的FisrtName:"+person.FirstName)
  12.     println("person的LastName:"+person.LastName)
  13.   }
  14. }

运行结果:

person的名称为:Xinyu Jiang

person的FisrtName:Xinyu

person的LastName:Jiang

8. 创建一个Car类,以只读属性对应制造商,型号名称,型号年份以及一个可读写的属性用于车牌。提供四组构造器。每个构造器都要求制造商和型号为必填。型号年份和车牌可选,如果未填,则型号年份为-1,车牌为空串。你会选择哪一个作为你的主构造器,为什么

程序代码:

  1. class Car(val manufactor:String,val model:String=null,val year:String=null,var number:Int= -1){
  2. }
  3. object Car{
  4.   def main(args: Array[String]): Unit = {
  5.     val Chevrolet=new Car("通用","雪佛兰-爱唯欧")
  6.     val Volkswagen=new Car("一汽","大众-斯柯达","2015-1-1")
  7.     val Volvo=new Car("吉利","Volvo-s40","2015-1-2",666666)
  8.     val nameArr=Array("雪佛兰","大众","沃尔沃")
  9.     val carArr=Array(Chevrolet,Volkswagen,Volvo)
  10.     Outinfo(nameArr,carArr)
  11.   }
  12.   def Outinfo(carName:Array[String],carArr:Array[Car])={
  13.     for(i <- 0 until carName.length){
  14.       println(carName(i))
  15.       println("汽车制造商为: "+carArr(i).manufactor)
  16.       println("汽车型号为: "+carArr(i).model)
  17.       println("汽车产年份为: "+carArr(i).year)
  18.       println("汽车车牌号为: "+carArr(i).number)
  19.     }
  20.   }
  21. }

运行结果:

雪佛兰

汽车制造商为: 通用

汽车型号为: 雪佛兰-爱唯欧

汽车产年份为: null

汽车车牌号为: -1


大众

汽车制造商为: 一汽

汽车型号为: 大众-斯柯达

汽车产年份为: 2015-1-1

汽车车牌号为: -1


沃尔沃

汽车制造商为: 吉利

汽车型号为: Volvo-s40

汽车产年份为: 2015-1-2

汽车车牌号为: 666666

9. 在Java,C#或C++重做前一个练习。Scala相比之下精简多少

程序代码:

  1. class JavaCar{
  2.    private String manufactor;
  3.    private String model;
  4.    private String year;
  5.    private int number;
  6.    public JavaCar(){}
  7.    public JavaCar(String manufactor,String model){
  8.       this.manufactor=manufactor;
  9.       this.model=model;
  10.       this.year=null;
  11.       this.number=-1;
  12.    }
  13.    public JavaCar(String manufactor,String model,String year){
  14.       this.manufactor=manufactor;
  15.       this.model=model;
  16.       this.year=year;
  17.       this.number=-1;
  18.    }
  19.    public JavaCar(String manufactor,String model,String year,int number){
  20.       this.manufactor=manufactor;
  21.       this.model=model;
  22.       this.year=year;
  23.       this.number=number;
  24.    }
  25.    public String getManufactor(){
  26.       return this.manufactor;
  27.    }
  28.    public String getModel(){
  29.       return this.model;
  30.    }
  31.    public String getYear(){
  32.       return this.year;
  33.    }
  34.    public void setNumber(int number){
  35.       this.number=number;
  36.    }
  37.    public int getNumber(){
  38.       return number;
  39.    }
  40.    public static void main(String[] args) {
  41.  
  42.    }
  43. }
  44. public class CarTest{
  45.    public static void main(String[] args) {
  46.       JavaCar Chevrolet=new JavaCar("通用","雪佛兰-爱唯欧");
  47.       JavaCar Volkswagen=new JavaCar("一汽","大众-斯柯达","2015-1-1");
  48.       JavaCar Volvo=new JavaCar("吉利","Volvo-S40","2015-1-2",66666);
  49.       String[] nameArr={"雪佛兰","大众","沃尔沃"};
  50.       JavaCar[] carinfoArr={Chevrolet,Volkswagen,Volvo};
  51.       CarTest cartest=new CarTest();
  52.       cartest.OutInfo(nameArr,carinfoArr);
  53.    }
  54.    public void OutInfo(String[] nameArr,JavaCar[] carinfoArr){
  55.       for(int i=0;i<nameArr.length;i++){
  56.          System.out.println(nameArr[i]);
  57.          System.out.println("汽车制造商: "+carinfoArr[i].getManufactor());
  58.          System.out.println("汽车型号: "+carinfoArr[i].getModel());
  59.          System.out.println("汽车年份: "+carinfoArr[i].getYear());
  60.          System.out.print("车牌号: "+carinfoArr[i].getNumber());
  61.       }
  62.    }
  63. }

运行结果:

雪佛兰

汽车制造商: 通用

汽车型号: 雪佛兰-爱唯欧

汽车年份: 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) }
}
重写该类,使用显示的字段定义,和一个缺省主构造器。你更倾向于使用哪种形式,为什么

程序代码:

  1. class Employee(var name:String,var salary:Double){
  2.   def this(){
  3.     this("Jom Q. Public",0)
  4.   }
  5. }
  6. object Employee{
  7.   def main(args: Array[String]): Unit = {
  8.     val ITemployee=new Employee
  9.     val Bankemployee=new Employee("Tom Hanks",100000)
  10.     println("ITemployee Name: "+ITemployee.name+" Salary: "+ITemployee.salary)
  11.     println("Bankemployee Name: "+Bankemployee.name+" Salary: "+Bankemployee.salary)
  12.   }
  13. }

运行结果:

ITemployee Name: Jom Q. Public Salary: 0.0

Bankemployee Name: Tom Hanks Salary: 100000.0

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Sunddenly】。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Scala学习(五)练习的更多相关文章

  1. Scala学习(五)---Scala中的类

    Scala中的类 摘要: 在本篇中,你将会学习如何用Scala实现类.如果你了解Java或C++中的类,你不会觉得这有多难,并且你会很享受Scala更加精简的表示法带来的便利.本篇的要点包括: 1. ...

  2. Scala学习五——类

    一.本章要点 类中的字段自动带有getter方法和setter方法 你可以用定制的getter/setter方法替换掉字段的定义,而不必修改使用类的客户端——这就是所谓的”统一访问原则“ 用@Bean ...

  3. Scala学习资源

    Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...

  4. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  5. TweenMax动画库学习(五)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  6. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  7. SVG 学习<五> SVG动画

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  8. 【Scala】Scala学习资料

    Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...

  9. Scala学习网址

    scala学习网址为:https://twitter.github.io/scala_school/zh_cn https://www.zhihu.com/question/26707124

随机推荐

  1. engineercms支持文档协作和文档流程,基于flow

    我们用于管理文件的系统,比如网盘云盘等,并不具备流程功能,所谓流程,本质是修改文档状态,比如,从初始状态,不同权限的人登录,查看这个文件,具有修改这个文档状态的权限,比如将初始状态修改为已审查状态. ...

  2. MQTT详解以及在IoT中的应用

    MQTT定义: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台, ...

  3. JavaScript大杂烩12 - 理解Ajax

    AJAX缘由 再次谈起这个话题,我深深的记得就在前几年,AJAX被炒的如火如荼,就好像不懂AJAX,就不会Web开发一样.要理解AJAX为什么会出现,就要先了解Web开发面临的问题. 我们先来回忆一下 ...

  4. 利用朴素贝叶斯分类算法对搜狐新闻进行分类(python)

    数据来源  https://www.sogou.com/labs/resource/cs.php介绍:来自搜狐新闻2012年6月—7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据,提供URL ...

  5. 03-13_WLST导航和定位MBean

    本文重点:WLST导航和定位MBean     MBean切换图 如上:红色的字体表示切换的命令.ls和cd是在当前树下切换,其他命令是在不同树之间切换. 其中: DomainMBeanServer有 ...

  6. Sql Server中查询当天,最近三天,本周,本月,最近一个月,本季度的数据的sql语句

    --当天: --最近三天: --本周: select * from T_news WHERE (DATEPART(wk, addtime) = DATEPART(wk, GETDATE())) AND ...

  7. 简单整理关于C#和Java的区别

    相信每个程序猿都有自己最喜欢的编程语言,然而对于编程语言似乎形成一条独特的鄙视链,就如Java和C#常常两边的开发者都是相互鄙视,然后他们一起共同鄙视全世界最好的编程语言——PHP 哈哈,但是其实我想 ...

  8. C#操作Exchange配置

    1.客户端配置:运行gpedit.msc进入本地组策略管理器,计算机配置>管理模版>Windows组件>WinRM>WinRM客户端启用允许未加密通信:启用受信任的主机并添加e ...

  9. 上下文管理器——with语句的实现

    前言 with语句的使用给我们带来了很多的便利,最常用的可能就是关闭一个文件,释放一把锁. 既然with语句这么好用,那我也想让我自己写的代码也能够使用with语句,该怎么实现? 下面具体介绍怎样实现 ...

  10. CRM 各种类型字段的 赋值 取值

    //lookupRecordEntity["new_lead"] = new EntityReference(entity.LogicalName, entity.Id); 获取时 ...