2019.3.13 Java實現分數的四則運算


Java實現分數的四則運算

自己的寫法

markdown太久沒寫格式不會用了--將就着看

  • Fraction.java

package com.lanou;

public class Fraction {

    private int numerator1;     //定義屬性:分子1
    private int denominator1;  //定義屬性:分母1

    private String operator;      //定義屬性:運算符

    private int numerator2;        //定義屬性:分子2
    private int denominator2;       //定義屬性:分母2


    //構造方法
    //constructor生成

    public Fraction(int numerator1, int denominator1, String operator, int numerator2, int denominator2) {
        this.numerator1 = numerator1;
        this.denominator1 = denominator1;
        this.operator = operator;
        this.numerator2 = numerator2;
        this.denominator2 = denominator2;
    }

    //加法
    public void addition() {

            int x = numerator1 * denominator2 + numerator2 * denominator1;
            int y = denominator1 * denominator2;
            gcd(x,y);

        }


    //減法
    public void subtraction() {

            int x = numerator1 * denominator2 - numerator2 * denominator1;
            int y = denominator1 * denominator2;
            gcd(x,y);
        }


    //乘法
    public void multiplication(){

        int x = numerator1 * numerator2;
        int y = denominator1 * denominator2;
        gcd(x,y);
    }

    //除法
    public void division(){

        int x = numerator1 * denominator2;
        int y = denominator1 * numerator2;
        gcd(x,y);

    }

    //歐幾里得+判斷輸出
    public int gcd(int m,int n) {

        //定義四個空變量
        int r;
        int t;
        int u;
        int w;

        //t和w用來存儲分子和分母的初始數據
        t = m;
        w = n;

        //求最大公因數
        while (n != 0) {
            r = m % n;
            m = n;
            n = r;
        }
        //循環結束后此時m即為最大公因數
        //放個u = m看着方便
        u = m;

        //分子分母分別除以最大公因數
        t = t / u;
        w = w / u;

        //判斷+輸出
        //分子分母都為1 直接輸出1
        if(t == 1 && w == 1){

            System.out.println("1");
        }
        //分子為0 分母不為0 直接輸出0
        else if(t == 0 && w != 0){

            System.out.println("0");
        }
        //分子分母都不為0且不為1 直接輸出
        else {

            System.out.println(t + "/" + w);
        }

        return 0;

    }

}
  • MainClass.java

package com.lanou;
import java.util.Scanner;

public class MainClass {

    public static void main(String[] args) {
    
        System.out.println("請輸入按分子1分母1運算符分子2分母2的形式輸入數據");
        Scanner scanner = new Scanner(System.in);

        int a = scanner.nextInt();
        int b = scanner.nextInt();
        String o = scanner.next();
        int c = scanner.nextInt();
        int d = scanner.nextInt();

        //判斷分母是否為0 若為0重新輸入 不為0繼續判斷
        if (b == 0 || d == 0){

            System.out.println("分母不能為零,請重新輸入");

            a = scanner.nextInt();
            b = scanner.nextInt();
            o = scanner.next();
            c = scanner.nextInt();
            d = scanner.nextInt();
        }

       
        //判斷o中是否是運算符
        if (!o.equals("+") && !o.equals("-") && !o.equals("*") && !o.equals("/")){

            System.out.println("運算符輸入錯誤,請重新輸入");

            a = scanner.nextInt();
            b = scanner.nextInt();
            o = scanner.next();
            c = scanner.nextInt();
            d = scanner.nextInt();
        }
    
        Fraction fraction = new Fraction(a, b, o, c, d);

        if (o.equals("+")){

            fraction.addition();
        }
        else if (o.equals("-")){

            fraction.subtraction();
        }
        else if (o.equals("*")){

            fraction.multiplication();
        }
        else if (o.equals("/")){

            fraction.division();
        }

    }
}

大仁哥的寫法


/**
 * @author lizhongren1.
 
*/
public class Fraction {

    
    // 分子(numerator)
    
    private int ntNum;
    
    // 分母(Denominator)
    
    private int doNum;

    

// 構造方法, 這里沒寫空的構造方法, 換句話說就是要求必須要有分子和分母.
    
    public Fraction(int ntNum, int doNum) {
        
    this.ntNum = ntNum;
        
    this.doNum = doNum;

        
    if (doNum == 0){
                // 分母不能為0
            
    System.out.println("分母不能為0, 已經改為1");
            
    this.doNum = 1;
     }

        // 創建新分數之后進行約分處理
        
    reduce();
  }

    

// 分數加法
    
public Fraction add(Fraction f){

        
// a/b + c/d
        
// 生成新的分子: a * d + b * c
        
int newNt = ntNum * f.getDoNum() + doNum * f.getNtNum();

        
// 生成新的分母: b * d
        
int newDo = doNum * f.getDoNum();

        
// 使用新的分子分母創建一個新的分數對象
        
Fraction newF = new Fraction(newNt, newDo);

        
return newF;
    }

    
// 約分方法: 把分數化為最簡分數, 即 6/12 化為 1/2
    
// 此方法和下一個方法都不想讓外部調用, 因此設置為private
    
private void reduce(){

        
// 獲得最大公約數
        
int m = maxDe(ntNum, doNum);

        
ntNum = ntNum / m;
        
doNum = doNum / m;
    }

    

// 最大公約數: 使用輾轉相除法(又名歐幾里德算法, 別問我怎么來的, 去問歐幾里德)
    
private int maxDe(int a, int b){
        
while(b != 0)
        {
            
int r = a % b;
            
a = b;
            
b = r;
        
}
        
return a;
    
}

    // 輸出字符串, 按照 分子/分母的形式輸出
    

@Override
    
public String toString() {

        
// 分子為0時輸出0
        
if (ntNum == 0){
            
return "0";
        
}

        // 分子分母相同時輸出1
        
if (ntNum == doNum){
            
return "1";
        }

        // 其余方式按 分子/分母 輸出
        
return ntNum + "/" + doNum;
    }

    // getter/setter方法
    
public int getNtNum() {
        
return ntNum;
    }

    
public void setNtNum(int ntNum) {
        
this.ntNum = ntNum;
    }

   
public int getDoNum() {
        
return doNum;
    }

    
public void setDoNum(int doNum) {
        
this.doNum = doNum;
    }

    // main方法測試
    
public static void main(String[] args) {

        
Fraction f1 = new Fraction(1,3);
        
Fraction f2 = new Fraction(4,9);

        // 分數f1 加上 分數f2
        
Fraction nf = f1.add(f2);

        
System.out.println(nf);

        
System.out.println(nf.add(new Fraction(9,12)));
    }
}

  • 輸入與輸出

  • 測試數據

  • 輸入格式:分子1 回車 分母1 回車 運算符 回車 分子2 回車 分母2 回車

  • 1/4+1/4

  • 0/4+0/4

  • 4/0+4/0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM