zoukankan      html  css  js  c++  java
  • 有理数类的设计

    1、有理数类的设计

    package number;
    
    public class Rational {
    
    	public int num;
    	public int denom;
    
    	public Rational(int num, int denom) {// 对有理数对象进行初始化
    		
    		this.num = num;
    		this.denom = denom;
    		
    		if(num==0&&denom==-1) {//若分子为零则直接返回
    			this.num=0;
    			this.denom=-1;
    			return;
    		}
    
    		if (denom == 0) {
    			System.err.println("分母不得为零");
    			return;
    		}
    
    		if (denom < 0) {// 将正负号设置到分子上
    			this.num = -num;
    			this.denom = -denom;
    		}
    
    		if (denom != 1) {// 若分母不为1则将分数化简
    			int a = Math.abs(num);
    			int b = Math.abs(denom);
    			int temp;
    			if (a < b) { // 保证被除数大于除数
    				temp = a;
    				a = b;
    				b = temp;
    			}
    			if (a % b != 0) {
    				while (a % b != 0) { // 在余数不为0时,进行循环
    					temp = a % b;
    					a = b;
    					b = temp;
    				}
    			}
    			this.num /= b;
    			this.denom /= b;
    		}
    	}
    
    	public void out() {// 输出有理数对象
    		System.out.println("(" + this.num + "," + this.denom + ")");
    	}
    	public Rational back() {
    		return new Rational(0,1);
    	}
    
    	public Rational plus(Rational number) {// 加法运算
    		int num = this.num * number.denom + number.num * this.denom;
    		int denom = this.denom * number.denom;
    		if(num==0)back();
    		return new Rational(num, denom);
    	}
    
    	public Rational subtract(Rational number) {// 减法运算
    		int num = this.num * number.denom - number.num * this.denom;
    		int denom = this.denom * number.denom;
    		if(num==0)back();
    		return new Rational(num, denom);
    	}
    
    	public Rational multiply(Rational number) {// 乘法运算
    		int num = this.num * number.num;
    		int denom = this.denom * number.denom;
    		if(num==0)back();
    		return new Rational(num, denom);
    	}
    
    	public Rational divide(Rational number) {// 除法运算
    		int num = this.num * number.denom;
    		int denom = this.denom * number.num;
    		if(num==0)back();
    		return new Rational(num, denom);
    	}
    }
    
    

    2、测试代码:

    package test;
    
    import number.Rational;
    
    public class Test {
    	public static void main(String[] args) {
    		// 创建有理数对象
    		Rational sc = new Rational(2, -8);
    		Rational st = new Rational(-4, 8);
    		sc.out();
    		st.out();
    		// 有理数的运算
    		Rational sv = sc.plus(st);
    		sv.out();
    		sv = sc.subtract(st);
    		sv.out();
    		sv = sc.multiply(st);
    		sv.out();
    		sv = sc.divide(st);
    		sv.out();
    	}
    }
    
    

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

    在函数的编写、调用、类的实例化方面可以明显看出java是通过对象这一概念来完成各种调用、生成和计算的。

    5a、别人如何复用你的代码?

    package包的导入

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

    依赖、有影响,包中类的属性经确立后,使用该类的其他类就只能使用该类有且仅有的属性和方法,不能对其修改。如属性修改后,别人调用时可能要根据修改的内容增加或删减参数才能实现调用

    5c、有理数类的public方法是否设置合适?为什么有的方法设置为private?

    根据访问权限和修改权限而定

  • 相关阅读:
    markdown基础使用技巧
    用ps实现提高照片的清晰度
    正则表达式匹配:中、日、韩文
    解决"$ is not defined" 亲自体验
    [NLP] 相对位置编码(一) Relative Position Representatitons (RPR)
    [NLP] cs224n-2019 Assignment 1 Exploring Word Vectors
    [Deep Learning] GELU (Gaussian Error Linerar Units)
    [Python] 等号赋值, copy, deepcopy的区别
    [微积分] 利用极坐标计算二重积分
    [c++] C++多态(虚函数和虚继承)
  • 原文地址:https://www.cnblogs.com/newideas/p/13768375.html
Copyright © 2011-2022 走看看