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
随机推荐
- VirtualBox下安装CentOS7系统
本文假定你已经知道如何安装VirtualBox虚拟机软件,并且已经安装好了. 首先我们需要准备好centos的iso镜像文件,可以从centos的官网下载. 以下操作使用的VirtualBox版本号是 ...
- Django之form总结
复习Django项目结构: 主要的文件:manage.py,url.py,views.py,settings.py,models.py manage.py:项目管理文件,一般不做修改. url.py: ...
- The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured
springboot 8080端口被占用报错:The Tomcat connector configured to listen on port 8080 failed to start. The p ...
- DMZ 区域
下面对DMZ区域进行简要介绍:DMZ是网络的一个区域,介于外网与内网之间的一个特殊区域,也称隔离区.它不同于传统的防火墙设置,DMZ防火墙方案为要保护的内部网络增加了一道安全防线,通常认为是非常安全的 ...
- cx_Oracle读取Oracle数据库中文乱码问题解决
在使用cx_Oracle模块读取Oracle数据库中的中文记录时,返回值皆为?,后google得此佳文,遂问题得以解决,特此记之. Oracle数据库版本是10g,字符集是AL32UTF8. 编写的p ...
- Kubernetes 核心概念
什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...
- Nginx:413 Request Entity Too Large
现象:在 Post 文件的时候遇到413 错误 :Request Entity Too Large: 原因:Nginx 限制了上传文件的大小,需在Nginx中修改/增加允许的最大文件大小: 操作:编辑 ...
- tidb集群某个节点报错之:node_exporter-9100.service failed
今天启动集群tidb时出现一个错误,是某个tikv节点报错:node_exporter-9100.service failed 一个节点的问题会导致整个集群启动失败.去此节点下的日志文件中查找,发现 ...
- 4.5Python数据类型(5)之列表类型
返回总目录 目录: 1.列表的定义 2.列表的常规操作 3.列表的额外操作 (一)列表的定义: 列表的定义 [var1, var2, --, var n ] # (1)列表的定义 [var1, var ...
- 17秋 软件工程 团队第五次作业 Alpha Scrum2
17秋 软件工程 团队第五次作业 Alpha Scrum2 今日完成的任务 杰麟:Java后端的学习: 世强:登录和注册接口编写: 港晨:完成数据库表的设计: 树民.陈翔:完成超级管理员后端框架. 其 ...