1. 改進Counter類,讓它不要在Int.MaxValue時變成負數 ide
程序代碼:this
-
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)
-
}
-
}
運行結果:spa
Int類型的最大值:2147483647scala
通過2147483647增長後Value值爲:2147483647對象
2. 編寫一個BankAccount類,加入deposit和withdraw方法,和一個只讀的balance屬性 blog
程序代碼:接口
-
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)
-
}
-
}
運行結果:rem
存入金額: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
var id:Long=0
}
執行命令:javap -private Student
運行結果:
![](http://static.javashuo.com/static/loading.gif)
使用@BeanProperty增長兼容JavaBean的get和set方法:
import scala.beans.BeanProperty
class Student {
@BeanProperty
var name:String=null
@BeanProperty
var id:Long=0
}
執行命令: javap -private Student
運行結果:
![](http://static.javashuo.com/static/loading.gif)
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】。
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。