zoukankan      html  css  js  c++  java
  • 有理数类的定义

    一、代码预览

    public class Rational {
    	private int num = 0;
    	private int deno = 1;
    
    	public Rational() {
    		this(0, 1);
    	}
    
    	public Rational(int num, int deno) // 约分到最简
    	{
    		int gcd = gcd(num, deno);
    		this.num = (deno > 0 ? 1 : -1) * num / gcd;
    		this.deno = Math.abs(deno) / gcd;
    	}
    
    	public static int gcd(int n, int d)// 寻找最大公约数
    	{
    		int nl = Math.abs(n);
    		int dl = Math.abs(d);
    		int gcd = 1;
    		int min = nl;
    		if (nl > dl) {
    			min = dl;
    		}
    		for (int i = 1; i <= min; i++) {
    			if (nl % i == 0 && dl % i == 0) {
    				gcd = i;
    			}
    		}
    		return gcd;
    	}
    
    	public int getNum() // 获得分子
    	{
    		return num;
    	}
    
    	public int getDeno() // 获得分母
    	{
    		return deno;
    	}
    
    	public Rational add(Rational second)// 加法运算
    	{
    		int n = num * second.getDeno() + deno * second.getNum();
    		int d = deno * second.getDeno();
    		return new Rational(n, d);
    	}
    
    	public Rational minus(Rational second)// 减法运算
    	{
    		int n = num * second.getDeno() - deno * second.getNum();
    		int d = deno * second.getDeno();
    		return new Rational(n, d);
    	}
    
    	public Rational multiply(Rational second)// 乘法运算
    	{
    		int n = num * second.getNum();
    		int d = deno * second.getDeno();
    		return new Rational(n, d);
    	}
    
    	public Rational divide(Rational second)// 除法运算
    	{
    		int n = num * second.getDeno();
    		int d = deno * second.getNum();
    		return new Rational(n, d);
    	}
    
    	public int intValue() // 转换为int类型
    	{
    		return (int) doubleValue();
    	}
    
    	public float floatValue() // 转换为float类型
    	{
    		return (float) doubleValue();
    	}
    
    	public double doubleValue() // 转换为double类型
    	{
    		return num * 1.0 / deno;
    	}
    
    	public long longValue() // 转换为long类型
    	{
    		return (long) doubleValue();
    	}
    
    	public String toString()// 转换为string类型
    	{
    		if (deno == 1) {
    			return num + "";
    		} else {
    			return num + "/" + deno;
    		}
    	}
    
    	public void compare(Rational second) // 比较两个有理数
    	{
    		Rational x = minus(second);
    		if (x.getNum() > 0) {
    			System.out.println(num + "/" + deno + "大于" + second.getNum() + "/" + second.getDeno());
    		} else if (x.getNum() == 0) {
    			System.out.println(num + "/" + deno + "等于" + second.getNum() + "/" + second.getDeno());
    		} else {
    			System.out.println(num + "/" + deno + "小于" + second.getNum() + "/" + second.getDeno());
    		}
    	}
    	
    }
    

    二、测试代码

    public static void main(String[] args) {
        Rational x = new Rational(1, 3);
        Rational y = new Rational(4, 6);
        System.out.println(x.add(y));
        System.out.println(x.minus(y));
        System.out.println(x.multiply(y));
        System.out.println(x.divide(y));
        System.out.println(x.intValue());
        System.out.println(x.floatValue());
        System.out.println(x.doubleValue());
        System.out.println(x.longValue());
        System.out.println(x.toString());
        x.compare(y);
    }
    

    三、运行结果

    四、讨论

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

    c语言中这些运算是通过函数来实现的。而设计的类会具象化,有属性和方法,这些都是比较直观的。

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

    导入我写的有理数类方可使用。

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

    是,因为他调用了我的有理数类,也就调用了其中的属性。不会影响,属性设置为private型。

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

    当你不希望你的方法可以被别人使用时可以使用private来设置方法,其具有一定的保护作用。而public就是公共的意思,方便调用。

  • 相关阅读:
    关于Java中String类的hashCode方法
    重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源
    vue+eslint+prettier+vetur 使用vscode 前端工程化
    vue webpack 打包优化
    移动端兼容
    vue 跨域使用
    vue2.0性能优化
    前端 mock的使用
    vue 使用Lodash 的throttle(节流)与debounce(防抖
    webpack4 安装及使用
  • 原文地址:https://www.cnblogs.com/yyzhu/p/13766114.html
Copyright © 2011-2022 走看看