• 3.1-有理数类的设计


    有理数设计

    一. 有理数类代码

    package rationalNumberDesign;
    
    public class Rational {
    
    	private int numberator;//分子
    	private int denominator;//分母
    	
    	public Rational(int numberator,int denominator) {//构造
    		int gcd = gcd(numberator,denominator);
    		this.numberator = numberator/gcd;
    		this.denominator = denominator/gcd;
    	}
    	public int getNumberator() {//获取分子
    		return  this.numberator;
    	}
    	public int getDeminator() {//获取分母
    		return this.denominator;
    	}
    		
    	private static int gcd(int numberator,int denominator) {//碾转相除法求最大公约数
    		int n1 = Math.abs(numberator);
    		int n2 = Math.abs(denominator);
    		int temp;
    		while (n2 != 0) {
    			temp = n1%n2;
    			n1 = n2;
    			n2 = temp;
    		}
    		return n1;
    	}
    	
    	public Rational add(Rational first,Rational second) {//加法
    		int num = first.numberator * second.denominator + second.numberator * first.denominator;
    		int den = first.denominator * second.denominator;
    
    		return new Rational(num,den);
    	}
    	
    	public Rational subtract(Rational first,Rational second) {//减法
    		int num = first.numberator * second.denominator - second.numberator * first.denominator;
    		int den = first.denominator * second.denominator;
    	
    		return new Rational(num,den);
    	}
    	
    	public Rational multiply(Rational first,Rational second) {//乘法
    		int num = first.numberator * second.numberator;
    		int den = first.denominator * second.denominator;
    
    		return new Rational(num,den);
    	}
    	
    	public Rational divide(Rational first,Rational second) {//除法
    		int num = first.numberator * second.denominator;
    		int den = first.denominator * second.numberator;
    		if(num<0&&den<0) {
    			num = Math.abs(num);
    			den = Math.abs(den);
    		}
    	
    		return new Rational(num,den);
    	}
    	
    	public String toString() {//转换为字符串类型
    		if(this.denominator == 1) {
    			return this.numberator+"";
    		}
    		else {
    			return this.numberator+"/"+this.denominator;
    		}
    	}
    	
    	public boolean equal(Rational first,Rational second) {//比较是否相等
    		if((first.numberator == second.numberator)&&(first.denominator == second.denominator)) {
    			return true;
    		}
    		else {
    			return false;
    		}	
    	}
    	
    	public int intValue() {//转换为int型
    	        return (int)doubleValue();
    	}
    
    	public long longValue() { //转换为long型
    
    	        return (long)doubleValue();
    	}
    	public float floatValue() {  //转换为float型
    	        return (float)doubleValue();
    	}
    
    	public double doubleValue() {//转换为double型
    	        return this.numberator*1.0/this.denominator;
    	} 
    }
    
    

    二. 测试代码

    package rationalNumberDesign;
    
    import rationalNumberDesign.Rational;
    import java.util.Scanner;
    public class rationalTest {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		while(sc.hasNext()) {
    			int a = sc.nextInt(), b = sc.nextInt(), c = sc.nextInt(), d = sc.nextInt();
    			Rational R1 = new Rational(a,b),R2 = new Rational(c,d);
    			System.out.println("加法有理数结果为:"+R1.add(R1, R2));
    			System.out.println("减法有理数结果为:"+R1.subtract(R1, R2));
    			System.out.println("乘法有理数结果为:"+R1.multiply(R1, R2));
    			System.out.println("除法有理数结果为:"+R1.divide(R1, R2));
    			System.out.println("二者比较结果:  "+R1.equal(R1, R2));
    			System.out.println(R1.intValue());
    			System.out.println(R1.longValue());
    			System.out.println(R1.floatValue());
    			System.out.println(R1.doubleValue());			
    		}
    		sc.close();
    	}
    
    }
    
    

    运行结果截图

    三. Q&A

    Q1. 描述怎么与c语言的有理数代码相比较,为什么你设计的类更加面向对象?
    A1. 面向过程的主要思考方向是“我要用它做什么”,而面向对象的主要思考方向是“这个东西能干什么”,而Java可以直接编写出“这个可以干什么”。面向对象的三个基本特征是:封装、继承、多态,Java也都具备,它扩展性强,重用性高,所以更倾向于面向对象。
    Q2. 别人如何复用你的代码?
    A2. 导入我的代码数据包并在前面使用import调用我的代码数据包。
    Q3. 别人的代码是否依赖你的有理数类的属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?
    A3. 会。不会,因为我的属性的修饰为private类型。
    Q4.有理数类的public方法是否设置合适?为什么有的方法设置为private?
    合适。有两种情况下可设置为private:a.当一个方法希望只被本类所使用;b.与本类的内部状态无关。设置成private后对别人相当于隐藏的不可见的,保证数据的安全性。
  • 相关阅读:
    babel缓存 非常实用(8)
    source-map 非常实用(7)
    webpack -HMR-非常实用(6)
    eslint 语法检查(5)
    对css 的处理(4)
    python之再学习----简单的字符串
    windows下安装django的具体步骤和各种问题
    Linux常用命令
    转:程序中得到SVN的版本号
    vue实战(1):准备与资料整理
  • 原文地址:https://www.cnblogs.com/599-/p/13766274.html
Copyright © 2020-2023  润新知