Java语言编写简单分数计算器

构造一个RationalNumber类:

package exercise;

public class RationalNumber {

    int numerator;
    int denominator;

    // 创建 RationalNumber 对象的构造函数, 其中分母 denominator 不能为 0,否则抛出 IllegalArgumentException 异常.
    public RationalNumber (int numerator, int denominator){
        this.numerator = numerator;
        this.denominator = denominator;
        if ( denominator == 0 ){
            throw new IllegalArgumentException();  // 抛出异常
        }
    }

    // 创建表示分数 0/1 的 RationalNumber
    public RationalNumber(){
        this.numerator = 0;
        this.denominator = 1;
    }

    // 返回分数的分子
    public int getNumerator(){
        return numerator;
    }

    // 返回分数的分母
    public int getDenominator(){
        return denominator;
    }

    // 对分数化为最简式
    public static RationalNumber DivideNumber(int numerator,int denominator){
        // 正负号化简
        if(numerator<0 && denominator<0){
            numerator = -numerator;
            denominator = -denominator;
        }else if(numerator > 0 && denominator < 0){
            numerator = -numerator;
            denominator = -denominator;
        }
        // 消去最大公因子
        int k = Math.min(numerator,denominator);
        while(numerator%k != 0 || denominator%k != 0){
            k--;
        }
        RationalNumber Divide_Number = new RationalNumber(numerator/k,denominator/k);
        return Divide_Number;
    }

    // 对两个分数进行比较,如果相等返回 true,否则返回 false
    public boolean equals (RationalNumber other){
        DivideNumber(numerator,denominator);
        DivideNumber(other.numerator,other.denominator);
        return(numerator==other.numerator && denominator==other.denominator);
    }

    // 返回两个分数的和
    public RationalNumber add(RationalNumber other){
        int add_denominator = denominator*other.denominator;
        int add_numerator = numerator*other.denominator + other.numerator*denominator;
        return DivideNumber(add_numerator,add_denominator);
    }

    // 返回分数的差
    public RationalNumber sub(RationalNumber other){
        int add_denominator = denominator*other.denominator;
        int add_numerator = numerator*other.denominator - other.numerator*denominator;
        return DivideNumber(add_numerator,add_denominator);
    }

    // 对两个分数做乘运算
    public RationalNumber multiply(RationalNumber other){
        int mul_denominator = denominator*other.denominator;
        int mul_numerator = numerator*other.numerator;
        return DivideNumber(mul_numerator,mul_denominator);
    }

    // 对两个分数做除运算
    public RationalNumber divide(RationalNumber other){
        int div_denominator = denominator*other.numerator;
        int div_numerator = numerator*other.denominator;
        return DivideNumber(div_numerator,div_denominator);
    }

    // 返回表示分数的字符串
    public String toString(RationalNumber number){
        if(denominator==1){
            return Integer.toString(number.getNumerator());  // 将整数转化为字符串类型
        }else{
            String s1 = Integer.toString(number.getNumerator());
            String s2 = Integer.toString(number.getDenominator());
            return s1+"/"+s2;
        }
    }
}

主程序实现:

package exercise_class;

import java.util.*;

public class RationalNumberMain {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String go_on = "y";
        while(go_on.equals("y")) {
            count();
            System.out.println("again?:(y/n)");
            go_on = in.next();
        }
    }

    public static void count(){
        System.out.println("--------------------------------------------------------------------");
        Scanner in = new Scanner(System.in);
        System.out.println("Please input the first rational number with the format \"a b\".");
        int n1 = in.nextInt();
        int d1 = in.nextInt();
        RationalNumber number1 = new RationalNumber(n1,d1);
        System.out.println("Please input the operator.");
        String operator = in.next();
        System.out.println("Please input the second rational number with the format \"c d\".");
        int n2 = in.nextInt();
        int d2 = in.nextInt();
        RationalNumber number2 = new RationalNumber(n2,d2);
        String result;
        if (operator.equals("+")){
            RationalNumber number_done = number1.add(number2);
            result = number_done.toString(number_done);
            System.out.println(number_done.getNumerator()+"/"+number_done.getDenominator());
        }else if (operator.equals("-")){
            RationalNumber number_done = number1.sub(number2);
            result = number_done.toString(number_done);
        }else if (operator.equals("*")){
            RationalNumber number_done = number1.multiply(number2);
            result = number_done.toString(number_done);
        }else{
            RationalNumber number_done = number1.divide(number2);
            result = number_done.toString(number_done);
        }
        System.out.println(n1+"/"+d1+" "+operator+" "+n2+"/"+d2+" = "+result);
        System.out.println("--------------------------------------------------------------------");
    }
}

运行结果示例:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N._

piu~打个赏吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值