該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
Fraction.java如下:(這個是網上找來的,處理分數的類)
// 支持查找功能的分數類
class Fraction implements Comparable {
// 分子
private int numerator;
// 分母
private int denominator;
// 默認構造函數
public Fraction() {
}
// 該構造函數對分子和分母進行初始化
public Fraction(int n, int d) {
setFraction(n, d);
}
// 該構造函數支持將雙精度數轉換為相應的分數
public Fraction(double d) {
convertToFraction(d);
}
// 該函數可以將雙精度數轉換為相應的分數
private void convertToFraction(double d) {
int decimalCount = 1;
// 求雙精度數的字符長度
int dLen = String.valueOf(d).length();
// 不斷的將雙精度數累乘10,直至轉換為整數為止
for (int i = 0; i < dLen; i++) {
d = d * 10;
decimalCount *= 10;
}
// 分子為最終的整數乘積結果
numerator = (int) d;
// 分母為10的累乘結果
denominator = decimalCount;
// 約分
reduct();
}
// 分子的設置函數,并且約分
public void setNumerator(int n) {
numerator = n;
reduct();
}
// 分子的讀取函數
public int getNumerator() {
return numerator;
}
// 分母的設置函數,并且約分
public void setDenominator(int d) {
// 檢查分母是否為0
if (d == 0)
denominator = 1; //建議采用異常
else
denominator = d;
reduct();
}
// 分母的讀取函數
public int getDenominator() {
return denominator;
}
// 分數的設置函數,并且約分
public void setFraction(int n, int d) {
setNumerator(n);
setDenominator(d);
reduct();
}
// 格式化字符信息輸出
public String toString() {
// 如果為負分數,則將負號提前顯示,分子和分母保留為正數,否則分子和分母皆取正數
if (numerator * denominator < 0)
return "-" + Math.abs(numerator) + "/" + Math.abs(denominator);
else
return Math.abs(numerator) + "/" + Math.abs(denominator);
}
// 利用對應小數值是否相同來判斷分數是否相同
public boolean equals(Fraction f) {
if (numerator == f.numerator && denominator == f.denominator)
return true;
else
return false;
}
// 利用對應小數值的大小來判斷分數的大小
public boolean isGreater(Fraction f) {
if ((double) numerator / denominator > (double) f.numerator
/ f.denominator)
return true;
else
return false;
}
// 約分函數
private void reduct() {
// 求分子和分母的最小值
int minValue = Math.min(Math.abs(numerator), Math.abs(denominator));
// 將小于分子和分母的最小值的數值,從大到小去除分子和分母,如果能夠同時被整除,則以此數值約分并退出
for (int i = minValue; i >= 1; i--) {
if (numerator % i == 0 && denominator % i == 0) {
numerator = numerator / i;
denominator = denominator / i;
break;
}
}
}
// 返回分數相加的結果,并且約分
public Fraction add(Fraction f) {
Fraction fraction = new Fraction();
fraction.numerator = numerator * f.denominator + f.numerator
* denominator;
fraction.denominator = denominator * f.denominator;
fraction.reduct();
return fraction;
}
// 返回分數相減的結果,并且約分
public Fraction minus(Fraction f) {
Fraction fraction = new Fraction();
fraction.numerator = numerator * f.denominator - f.numerator
* denominator;
fraction.denominator = denominator * f.denominator;
fraction.reduct();
return fraction;
}
// 返回分數相乘的結果,并且約分
public Fraction multiply(Fraction f) {
Fraction fraction = new Fraction();
fraction.numerator = numerator * f.numerator;
fraction.denominator = denominator * f.denominator;
fraction.reduct();
return fraction;
}
// 返回分數相除的結果,并且約分
public Fraction divide(Fraction f) {
Fraction fraction = new Fraction();
fraction.numerator = numerator * f.denominator;
fraction.denominator = denominator * f.numerator;
fraction.reduct();
return fraction;
}
// 支持兩個分數類變量的比較,以實現分數集合的查找功能
public int compareTo(Object o) {
Fraction f = (Fraction) o;
// 利用對應小數的大小來比較分數的大小
if ((double) numerator / denominator > (double) f.numerator
/ f.denominator)
return 1;
else if ((double) numerator / denominator < (double) f.numerator
/ f.denominator)
return -1;
else
return 0;
}
// 根據對應小數是否相同來判斷分數是否相同
public boolean equals(Object obj) {
Fraction f = (Fraction) obj;
if (Math.abs((double) numerator / denominator - (double) f.numerator
/ f.denominator) < 0.00001)
return true;
return false;
}
// 相同數值的分數返回相同的哈希碼
public int hashcode() {
String str = String.valueOf((double) numerator / denominator);
return str.hashCode();
}
}