概述
通過前幾節(jié)課我們學(xué)習(xí)了Java中對(duì)象類的屬性鹤啡,方法,構(gòu)造方法蹲嚣,封裝等相關(guān)知識(shí)递瑰,這節(jié)課通過一個(gè)分式計(jì)算器項(xiàng)目來練習(xí)Java類的知識(shí)。分式由兩個(gè)部分組成:分子和分母隙畜,在本項(xiàng)目中需要定義兩個(gè)類抖部,Fraction
類,是一個(gè)對(duì)象類议惰,這個(gè)類中定義了分式的屬性慎颗,構(gòu)造方法和分式的運(yùn)算方法。FrationCalculator
類是一個(gè)客戶類言询,這個(gè)類主要處理與用戶的交互俯萎,調(diào)用Fraction
類獲取分式計(jì)算結(jié)果,并將結(jié)果返回給用戶运杭。
Fraction
類
屬性
- 定義兩個(gè)private的整型變量夫啊,名稱分別為numerator和denominator
構(gòu)造方法
- 第一個(gè)構(gòu)造方法是有兩個(gè)形參,通過兩個(gè)形參來初始化類的numerator和denominator屬性
- 如果用戶輸入的denominator是0辆憔,則拋出
IllegalArgumentException()
的異常 - 如果用戶輸入的denominator是負(fù)值撇眯,則將符號(hào)轉(zhuǎn)移到numerator中,例如虱咧,輸入-3/-5叛本,則返回3/5,輸入3/-5彤钟,則返回-3/5
例如: Fraction myFraction = new Fraction(3, 5)来候, 則myFraction的numerator = 3, denominator = 5逸雹。
- 如果用戶輸入的denominator是0辆憔,則拋出
- 第二個(gè)構(gòu)造方法是有一個(gè)形參营搅,通過該形參來初始化類的numerator屬性
- 將denominator的值設(shè)為默認(rèn)值1
例如:Fraction myFraction = new Fraction(3) ,則myFraction的numerator = 3梆砸, denominator = 1
- 將denominator的值設(shè)為默認(rèn)值1
- 第三個(gè)構(gòu)造方法是沒有形參
- 將numerator的值設(shè)為默認(rèn)值0转质,將denominator的值設(shè)為默認(rèn)值1
例如: Fraction myFraction = new Fraction(), 則myFraction的numerator = 0帖世,denominator = 1休蟹,分式的值為0
- 將numerator的值設(shè)為默認(rèn)值0转质,將denominator的值設(shè)為默認(rèn)值1
在程序的后兩個(gè)構(gòu)造方法中,我們要盡量借助this
關(guān)鍵字利用前一個(gè)構(gòu)造方法來簡(jiǎn)化代碼。
方法
方法名 | 參數(shù) | 返回值 | 描述 |
---|---|---|---|
getNumerator() | none | int | 返回分式中numerator的值 |
getDenominator() | none | int | 返回分式中denominator的值 |
toString() | none | String | 以"numerator/denominator"的格式返回分式的值 |
toDouble() | none | double | 計(jì)算分式的值赂弓,返回double類型的計(jì)算結(jié)果 |
add() | Fraction other | Fraction | 返回與另一個(gè)分式相加以后的分式 |
subtract() | Fraction other | Fraction | 返回與另一個(gè)分式相減以后的分式 |
multiply() | Fraction other | Fraction | 返回與另一個(gè)分式相乘以后的分式 |
divide() | Fraction other | Fraction | 返回與另一個(gè)分式相除以后的分式 |
equals() | Object other | boolean | 檢查兩個(gè)分式是否相等 |
toLowestTerms() | none | none | 對(duì)分式進(jìn)行約分 |
gcd() | int num, int den | int | 返回兩個(gè)整數(shù)的最大公約數(shù)绑榴,定義為static方法 |
equals()
重寫Object類的public boolean equals(Object other)
方法。首先判斷對(duì)象是否是Fraction類盈魁,然后判斷傳入的分式與當(dāng)前分式是否相等翔怎。
注意: 1/2與2/4比較,結(jié)果返回true杨耙。
toLowestTerms()
將分式的分子與分母進(jìn)行約分操作赤套,更新分式numerator和denominator的屬性值,保持分式整體的值不變珊膜。約分的關(guān)鍵是找到分子與分母的最大公約數(shù)容握,關(guān)于求最大公約數(shù)的算法,以下是輾轉(zhuǎn)相除法的偽代碼:
if a equals b
return a or b;
find the reminder of a dived by b
if reminder equals zero
return b
else
set a to b
set b to reminder
FractionCalculator
類
在這個(gè)類中车柠,我們打印信息到控制臺(tái)剔氏,接收用戶從控制臺(tái)輸入的信息,對(duì)信息進(jìn)行處理堪遂,并返回結(jié)果。
程序邏輯
- 首先萌庆,輸出提示信息溶褪,讓用戶輸入操作符(+,-,/,*,=),如果用戶輸入q或Q践险,則退出程序猿妈。
- 用戶輸入操作符,檢查用戶輸入的操作符是否合法巍虫,不合法則提示用戶重新輸入彭则,直到用戶輸入合法操作符
- 提示用戶輸入第一個(gè)分式,檢查用戶輸入的分式是否合法占遥,不合法則提示用戶重新輸入俯抖,直到用戶輸入的分式合法
- 提示用戶輸入第二個(gè)分式,檢查用戶輸入的分式是否合法瓦胎,不合法則提示用戶重新輸入芬萍,直到用戶輸入的分式合法
- 打印計(jì)算結(jié)果
This program is a fraction calculator
It will add, subtract, multiply and divide fractions until you type Q to quit.
Please enter your fractions in the form a/b, where a and b are integers.
Please enter an operation (+, -, /, *, = or Q to quit)+
Please enter first fraction (a/b) or integer (a): 1/2
Please enter second fraction (a/b) or integer (a): 1/4
1/2 + 1/4 = 3/4
Please enter an operation (+, -, /, *, = or Q to quit)-
Please enter first fraction (a/b) or integer (a): 2/3
Please enter second fraction (a/b) or integer (a): 1/3
2/3 - 1/3 = 1/3
Please enter an operation (+, -, /, , = or Q to quit)
Please enter first fraction (a/b) or integer (a): 1/4
Please enter second fraction (a/b) or integer (a): 3/5
1/4 * 3/5 = 3/20
Please enter an operation (+, -, /, *, = or Q to quit)/
Please enter first fraction (a/b) or integer (a): 3/5
Please enter second fraction (a/b) or integer (a): 2/5
3/5 / 2/5 = 3/2
Please enter an operation (+, -, /, *, = or Q to quit)=
Please enter first fraction (a/b) or integer (a): 1/4
Please enter second fraction (a/b) or integer (a): 2/8
1/4 = 2/8 is true
Please enter an operation (+, -, /, *, = or Q to quit)qProcess finished with exit code 0
附錄
關(guān)于該項(xiàng)目的示例代碼,可以從GitHub中下載Project - FracCalc搔啊。