Scala學習(五)練習

Scala中的類&練習java

1. 改進Counter類,讓它不要在Int.MaxValue時變成負數 ide

程序代碼:this

  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. }

運行結果:spa

Int類型的最大值:2147483647scala

通過2147483647增長後Value值爲:2147483647對象

2. 編寫一個BankAccount類,加入deposit和withdraw方法,和一個只讀的balance屬性 blog

程序代碼:接口

  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. }

運行結果:rem

存入金額: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

var id:Long=0

}

執行命令:javap -private Student

運行結果:

使用@BeanProperty增長兼容JavaBean的get和set方法:

import scala.beans.BeanProperty

class Student {

@BeanProperty

var name:String=null

@BeanProperty

var id:Long=0

}

執行命令: 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

personFisrtName:Xinyu

personLastName: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】。

 

本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。

相關文章
相關標籤/搜索