快學scala習題(五)

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.}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章