有理数类的设计

关于有理数类的相关代码

  • Rational.java

package JavaLearn;

public class Rational {
	private int numerator;//分子
	private int denominator;//分母
	
    public int getNumerator(){
        return numerator;
    }
    public int getDenominator(){
        return denominator;
    }
    public int gcd(int a,int b){//计算最大公约数
        if(a<b){
            int c=a;
            a=b;
            b=c;
        }
        int r=a%b;
        while(r!=0){
            a=b;
            b=r;
            r=a%b;
        }
        return b;
    }
    public void setNum(int a,int b){    //设置分子和分母
        int c=gcd(Math.abs(a),Math.abs(b)); 
        numerator=a/c;
        denominator=b/c;
        if(numerator<0&&denominator<0){
            numerator=-numerator;
            denominator=-denominator;
        }
    }
    public Rational(int a,int b){    //构造有理数
        if(a==0){
            numerator=0;
            denominator=0;
        }
        else{
            setNum(a,b);
        }
    }
    public Rational add(Rational r){       //加法运算
        int a=r.getNumerator();
        int b=r.getDenominator();
        int newNumerator=numerator*b+denominator*a;
        int newDenominator=denominator*b;
        Rational result=new Rational(newNumerator,newDenominator);
        return result;
    }
    public Rational sub(Rational r){      //减法运算
        int a=r.getNumerator();
        int b=r.getDenominator();
        int newNumerator=numerator*b-denominator*a;
        int newDenominator=denominator*b;
        Rational result=new Rational(newNumerator,newDenominator);
        return result;
    }
    public  Rational muti(Rational r){         //乘法运算
        int a=r.getNumerator();
        int b=r.getDenominator();
        int newNumerator=numerator*a;
        int newDenominator=denominator*b;
        Rational result=new Rational(newNumerator,newDenominator);
        return result;
    }
    public Rational div(Rational r){        //除法运算
        int a=r.getNumerator();
        int b=r.getDenominator();
        int newNumerator=numerator*b;
        int newDenominator=denominator*a;
        Rational result=new Rational(newNumerator,newDenominator);
        return result;
    }

}
  • Main.java

package JavaLearn;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入第一个数的分子、分母:");
		int a = sc.nextInt();
		int b = sc.nextInt();
		System.out.print("请输入第二个数的分子、分母:");
		int c = sc.nextInt();
		int d = sc.nextInt();
		Rational num1 = new Rational(a,b);
		Rational num2 = new Rational(c,d);
		Rational result=num1.add(num2);//加法运算
		System.out.print(a+"/"+b+" + "+c+"/"+d+" = ");
		System.out.println(result.getNumerator()+"/"+result.getDenominator());
		
		result=num1.sub(num2);//减法运算
		System.out.print(a+"/"+b+" - "+c+"/"+d+" = ");
		System.out.println(result.getNumerator()+"/"+result.getDenominator());
		
		result=num1.muti(num2);//乘法运算
		System.out.print(a+"/"+b+" * "+c+"/"+d+" = ");
		System.out.println(result.getNumerator()+"/"+result.getDenominator());
		
		result=num1.div(num2);//除法运算
		System.out.print(a+"/"+b+" / "+c+"/"+d+" = ");
		System.out.println(result.getNumerator()+"/"+result.getDenominator());
		sc.close();
		
	}
	
}

  • 运行结果示例

关于有理数类的相关问题

1.与c语言的有理数代码相比较,为什么你设计的类更加面向对象?

在使用C语言编写有理数代码过程中,注重的更多是完成这个功能,不要求功能与功能之间的联系,而面向对象编程则更加系统,不同的功能被不同的类,模块分隔的清楚,需要使用的时候只要使用我们所需的功能即可。

2.别人如何复用你的代码?

直接复制我的代码并命名为Rational的类,需要使用的时候导出或新建一个类调用Rational的方法即可。

3.别人的代码是否依赖你的有理数类的内部属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?

依赖;当我的有理数类的属性修改时,会影响他人调用我的有理数类的代码。

4.有理数类的public方法是否设置合适?为什么有的方法设置为private?

合适,当其他类要使用该类时,public可以直接调用,而private用来限制自身访问。

5. 你的类里面有static属性或方法吗?如果有,为什么要设置为static的?

有,要把这个返回到其它函数里面,于是要求退出函数不释放。

posted @ 2021-09-27 20:06  xpeanut  阅读(65)  评论(1)    收藏  举报