快学scala习题(五)

原创 2015年11月22日 17:22:42

1.Int.MaxValue代表着Int的最大值,一旦越过就会导致值变为负数,所以,需要在Increment里面加上判断语句

 class Counter{
     private var value=Int.MaxValue;
     def increment():Unit={
       if(value<Int.MaxValue){
           value=value+1
       }
     };
     def current=value;

   }

2.因为只有可读属性,所以需要用到val,仅生成get

 class BankAccount{
     val balance:Int=0;
     def deposit(){

     }
     def withdraw(){

     }

   }

3.

   class Time(val hours:Int,val minutes:Int){
     def before(other: Time):Boolean={
          if( hours>other.hours){
            true;
          }else if(hours==other.hours){
            if(minutes>other.minutes)
              true;
            else
              false;
          }else{
            false;
          }


     }
     def show=hours+":"+minutes;
   }

4.

class Time(val hours:Int,val minutes:Int){
     def before(other: Time):Boolean={
          if( hours>other.hours){
            true;
          }else if(hours==other.hours){
            if(minutes>other.minutes)
              true;
            else
              false;
          }else{
            false;
          }


     }
     def show=hours*60+minutes;
   }

5.使用javabean属性,旧版在scala.reflect.BeanProperty中,新版换到scala.Bean.BeanPropoerty,使用前请根据版本加入对应的包

import scala.beans.BeanProperty;
  class Student{
     @BeanProperty var name:String="";
     @BeanProperty var id:Long=0;
   }

javap的反编译方式如下

C:\Users\pengchen>javap -c C:\Users\pengchen\workspace\hello\bin\five$Student.cl
ass
Compiled from "five.scala"
public class five$Student {
  public final five $outer;

  public java.lang.String name();
    Code:
       0: aload_0
       1: getfield      #14                 // Field name:Ljava/lang/String;
       4: areturn

  public void name_$eq(java.lang.String);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #14                 // Field name:Ljava/lang/String;
       5: return

  public void setName(java.lang.String);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #14                 // Field name:Ljava/lang/String;
       5: return

  public long id();
    Code:
       0: aload_0
       1: getfield      #23                 // Field id:J
       4: lreturn

  public void id_$eq(long);
    Code:
       0: aload_0
       1: lload_1
       2: putfield      #23                 // Field id:J
       5: return

  public void setId(long);
    Code:
       0: aload_0
       1: lload_1
       2: putfield      #23                 // Field id:J
       5: return

  public java.lang.String getName();
    Code:
       0: aload_0
       1: invokevirtual #29                 // Method name:()Ljava/lang/String;
       4: areturn

  public long getId();
    Code:
       0: aload_0
       1: invokevirtual #32                 // Method id:()J
       4: lreturn

  public five five$Student$$$outer();
    Code:
       0: aload_0
       1: getfield      #36                 // Field $outer:Lfive;
       4: areturn

  public five$Student(five);
    Code:
       0: aload_1
       1: ifnonnull     6
       4: aconst_null
       5: athrow
       6: aload_0
       7: aload_1
       8: putfield      #36                 // Field $outer:Lfive;
      11: aload_0
      12: invokespecial #41                 // Method java/lang/Object."<init>":
()V
      15: aload_0
      16: ldc           #43                 // String
      18: putfield      #14                 // Field name:Ljava/lang/String;
      21: aload_0
      22: lconst_0
      23: putfield      #23                 // Field id:J
      26: return
}

6.改造5.2的person类,使Age<0时让其等于0,var保证其生成getter和setter

 class person(var Age:Int){
     if(Age<0) Age=0;

   }

7.改造person类,提供只读属性firstName和lastName,这里需要用到val类型,避免生成setter对象

 class PersonE(val Name:String){
      def firstName=Name.split(" ")(0);
      def LastName=Name.split(" ")(1)


   }

8.创建一个car类,题目没看懂。。。。4个构造器都一样应该会报错才对。。。

  /*4组属性制造商必填,型号名称必填,型号年份选填-1,车牌选填“”可读可写*/
   class Car(val Pub:String,val TypeName:String,val Year:Int= -1,var Num:String=""){


   }

9用java或c++实现第8题同样的类,这个就不用写了吧

10.

1.class Employ{  
2.    val name:String = "John Q. Public"   
3.    var salary:Double = 0.0  
4.}  
版权声明:本文为博主原创文章,未经博主允许不得转载。

快学Scala习题解答—第六章 对象

6 对象  6.1 编写一个Conversions对象,加入inchesToCentimeters,gallonsToLiters和milesToKilometers方法  Scala代码   ...
  • u012762573
  • u012762573
  • 2015年08月20日 16:08
  • 975

06 快学scala第六章习题答案

7 对象  7.1 编写一个Conversions对象,加入inchesToCentimeters,gallonsToLiters和milesToKilometers方法  Scala代码  ...
  • china_demon
  • china_demon
  • 2016年08月14日 19:32
  • 256

快学Scala习题解答—第五章 类

6 类 6.1 改进5.1节的Counter类,让它不要在Int.MaxValue时变成负数 加个判断就OK了 class Count{ private var value ...
  • ivan_pig
  • ivan_pig
  • 2012年12月06日 18:17
  • 1262

快学Scala习题解答—第七章 包和引入

8 包和引入 8.1 编写示例程序,展示为什么 package com.horstmann.impatient 不同于 package com package horstma...
  • ivan_pig
  • ivan_pig
  • 2012年12月10日 19:24
  • 1509

快学Scala习题解答—第十二章 高阶函数

12 高阶函数 12.1 编写函数values(fun:(Int)=>Int,low:Int,high:Int),该函数输出一个集合,对应给定区间内给定函数的输入和输出。比如,values(x=>x*...
  • u012762573
  • u012762573
  • 2015年08月22日 21:52
  • 703

快学scala习题解答--第五章 类

5 类  5.1 改进5.1节的Counter类,让它不要在Int.MaxValue时变成负数  Scala代码   class Count{     private var value ...
  • u012762573
  • u012762573
  • 2015年08月20日 14:57
  • 1137

《快学Scala》第18章习题参考解答(高级类型)

《快学Scala》第18章习题,感觉不太容易,有问题还望指正。
  • jiexray
  • jiexray
  • 2017年07月12日 16:48
  • 158

快学Scala习题解答—第八章 继承

8 继承  8.1 扩展如下的BankAccount类,新类CheckingAccount对每次存款和取款都收取1美元的手续费class BankAccount(initialBalance:Dou...
  • u012762573
  • u012762573
  • 2015年08月20日 21:06
  • 586

《快学Scala》第六章习题解答

RT。 package com.scalalearn.scala.main /** * 快学scala 06习题 */ //1.编写一个Conversions对象,加入inchesToCe...
  • rongyongfeikai2
  • rongyongfeikai2
  • 2016年05月15日 00:11
  • 454

快学Scala习题答案(第12章高阶函数)

object exc12 { def main(args: Array[String]){ //1 def values(f:Int=>Int, low:Int , high:I...
  • zpyzly
  • zpyzly
  • 2015年11月09日 23:59
  • 429
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快学scala习题(五)
举报原因:
原因补充:

(最多只允许输入30个字)