分?jǐn)?shù)類(lèi):
package org.mobilephone;
/**
* 分?jǐn)?shù)(有理數(shù))
* @author apple
*
*/
public class Fraction {
private int num;//分子
private int den;//分母
/**
* 構(gòu)造器:指定分子和分母躯泰,創(chuàng)建分?jǐn)?shù)對(duì)象
* @param num 分子
* @param den 分母
* @throws FractionException 如果分母為0灿意,就會(huì)引發(fā)異常
*/
public Fraction(int num,int den) {
if (den == 0) {
throw new FractionException("分母不能為零");
}
this.num = num;
this.den = den;
this.normalize();
this.simplify();
}
/**
* 構(gòu)造器:將小數(shù)化成分?jǐn)?shù)
* @param val 一個(gè)小數(shù)
*/
public Fraction(double val){
// int x = (int) (val * 10000);
// int y = 10000;
// this.num = x;
// this.den = y;
this((int)(val * 10000), 10000);//在構(gòu)造器里通過(guò)this去調(diào)用已有的構(gòu)造器(必須寫(xiě)在構(gòu)造器里的第一句)
}
/**
* 分?jǐn)?shù)的加法
* @param other 另一個(gè)分?jǐn)?shù)
* @return 相加的結(jié)果(新的分?jǐn)?shù))
*/
public Fraction add(Fraction other){//加法
return new Fraction(num * other.den + other.num * den, den * other.den);
}
/**
* 分?jǐn)?shù)的減法
* @param other 另一個(gè)分?jǐn)?shù)
* @return 相減的結(jié)果(新的分?jǐn)?shù))
*/
public Fraction sub(Fraction other){//減法
return new Fraction(num * other.den - other.num * den, den * other.den);
}
/**
* 分?jǐn)?shù)的乘法
* @param other 另一個(gè)分?jǐn)?shù)
* @return 相乘后的結(jié)果(新的分?jǐn)?shù))
*/
public Fraction mul(Fraction other){//乘法
return new Fraction(num * other.num, den * other.den);
}
/**
* 分?jǐn)?shù)的除法
* @param other 另一個(gè)分?jǐn)?shù)
* @return 相除的結(jié)果(新的分?jǐn)?shù))
*/
public Fraction div(Fraction other){//除法
return new Fraction(num * other.den, den * other.num);
}
/**
* 分?jǐn)?shù)的正規(guī)化:讓負(fù)號(hào)在最前面
*/
public void normalize(){//分?jǐn)?shù)正規(guī)化
if (den < 0) {
num = -num;
den = -den;
}
}
/**
* 化簡(jiǎn):分子分母同時(shí)除以最大公約數(shù)
*/
public void simplify(){//化簡(jiǎn)
if (num != 0) {//取絕對(duì)值
int x = Math.abs(num);
int y = Math.abs(den);
int factor = gcd(x, y);
if (factor > 1) {
num /= factor;
den /= factor;//分子分母同時(shí)除以最大公約數(shù)
}
}
}
@Override
public String toString() {//tostring方法腔呜,讓輸出結(jié)果不是哈希碼
if (num == 0) {
return "0";
}
else if (den == 1) {
return "" + num;
}
else{
return num + "/" + den;
}
}
private int gcd(int x,int y){//找最大公約數(shù)
if (x > y) {
return gcd(y, x);
}
else if (y % x != 0) {
return gcd(y % x,x);
}
else {
return x;
}
}
}
分?jǐn)?shù)操作異常類(lèi):
package org.mobilephone;
/**
* 分?jǐn)?shù)操作異常(運(yùn)行時(shí)異常/非受檢異常)
* @author apple
*
*/
@SuppressWarnings("serial")
public class FractionException extends RuntimeException {
/**
* 構(gòu)造器
* @param message 異常相關(guān)消息
*/
public FractionException(String message){
super(message);
}
}
測(cè)試類(lèi):
package org.mobilephone;
public class FractionTest {
public static void main(String[] args) {
Fraction f1 = new Fraction(2, 3);
System.out.println(f1);
Fraction f2 = new Fraction(3, 4);
System.out.println(f2);
System.out.println(f1.add(f2));
System.out.println(f1.sub(f2));
System.out.println(f1.mul(f2));
System.out.println(f1.div(f2));
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者