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就是公共的意思,方便调用。

  • 相关阅读:
    Android View 阴影的总结
    清晰的教你如何将 Maven 项目上传至 中央仓库以及版本更新
    简单粗暴的上传项目至 Github
    App自动更新(DownloadManager下载器)
    类型判断
    前端防御XSS
    window.location.href/replace/reload()/页面跳转+替换+刷新
    对数组排序进行"洗牌"(随机排序)
    iframe跨域上传图片
    Vim 新手节省时间的小技巧
  • 原文地址:https://www.cnblogs.com/yyzhu/p/13766114.html
Copyright © 2011-2022 走看看