ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java互评-有理数的设计

2020-10-04 11:00:51  阅读:243  来源: 互联网

标签:有理数 int System 互评 println Java public out


目录

1.有理数代码

package Rational;

public class Rational {
	private int numerator;//分子
	private int denominator;//分母
	
	//分子和分母的Getter和setter
	public int getNumerator() {
		return numerator;
	}
	
	public void setNumerator(int numerator) {
		this.numerator = numerator;
	}
	
	public int getDenominator() {
		return denominator;
	}
	
	public void setDenominator(int denominator) {
		this.denominator = denominator;
	}
	
	
	public Rational() {//无参构造函数
		this.numerator=0;
		this.denominator=1;
	}
	public Rational(int numerator, int denominator) {//构造函数
		int gcd = gcd(numerator,denominator);
		this.numerator=((denominator>0)?1:-1)*numerator/gcd;
		this.denominator=Math.abs(denominator)/gcd;
	}
	
	private int gcd(int a,int b) {//求最大公约数
		a=Math.abs(a);
		b=Math.abs(b);
		int t;
		if(a<b) {
			t=a;
			a=b;
			b=t;
		}
		t=a%b;
		while(t!=0) {
			a=b;
			b=t;
			t=a%b;
		}
		return b;
	}
	
	public Rational add(Rational secondRational) {//加法
		int numerator2 = this.numerator*secondRational.getDenominator() + this.denominator*secondRational.getNumerator();
		int denominator2 = this.denominator*secondRational.getDenominator();
		return new Rational(numerator2,denominator2);
	}
	
	public Rational subtract(Rational secondRational) {//减法
		int numerator2 = this.numerator*secondRational.getDenominator() - this.denominator*secondRational.getNumerator();
		int denominator2 = this.denominator*secondRational.getDenominator();
		return new Rational(numerator2,denominator2);
	}
	
	public Rational multiply(Rational secondRational) {//乘法
		int numerator2 = this.numerator*secondRational.getNumerator();
		int denominator2 = this.denominator*secondRational.getDenominator();
		return new Rational(numerator2,denominator2);
	}
	
	public Rational divide(Rational secondRational) {//除法
		int numerator2 = this.numerator*secondRational.getDenominator();
		int denominator2 = this.denominator*secondRational.getNumerator();
		return new Rational(numerator2,denominator2);
	}
	
	public Rational abs() {//绝对值
		int numerator2 = this.numerator;
		int denominator2 = this.denominator;
		if(numerator2<0) numerator2 = -numerator2;
		if(denominator2<0) denominator2 = -denominator2;
		return new Rational(numerator2,denominator2);
	}
	
	public int compare(Rational secondRational) {//比较大小
		if(this.subtract(secondRational).getNumerator()>0) {
			return 1;
		}else if(this.subtract(secondRational).getNumerator()<0) {
			return -1;
		}else return 0;
	}
	
	public boolean equals(Rational secondRational) {//判断是否相等
		if(this.subtract(secondRational).getNumerator()==0) {
			return true;
		}else return false;
	}
	
	public String toString() {//转换成字符串类型
		if(this.denominator==1) {
			return this.numerator+"";
		}else {
			return this.numerator+"/"+this.denominator;
		}
	}
	
	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 1.0*this.numerator/this.denominator;
	}
}

2.测试代码

(在与有理数类不同包的其他类中调用有理数类)

package testRational;

import Rational.Rational;

public class testRational {
	public static void main(String[] args) {
		Rational a= new Rational(-5,8);
		Rational b= new Rational(8,12);
		
		
		System.out.println(a.toString());
		System.out.println(b.toString());
		
		//测试有理数运算方法
		System.out.println("a+b = "+a.add(b));
		System.out.println("a-b = "+a.subtract(b));
		System.out.println("a*b = "+a.multiply(b));
		System.out.println("a/b = "+a.divide(b));
		System.out.println("a的绝对值 = "+a.abs());
		System.out.println("a和b比大小:"+a.compare(b));
		System.out.println("a和b是否相等:"+a.equals(b));
		System.out.println("a转换成int类型 = "+a.intValue());
		System.out.println("a转换成long类型 = "+a.longValue());
		System.out.println("a转换成float类型 = "+a.floatValue());
		System.out.println("a转换成double类型 = "+a.doubleValue());
	}
}

运行结果:

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

C语言的代码更加面向过程,在解决问题时,不同于C语言使用函数,我设计的类的核心在于对象本身,而不是整个解决过程。并且我设计的具有面向对象语言的许多特征如封装性、继承等等等,也更方便他人调用。

4.从代码复用的角度来描述你设计的有理数类。从几个方面讨论。

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

导入相应包中的有理数类即可调用,如导入:import cn.edu.jmu.Rational;

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

别人的代码不依赖我的有理数类的属性。、
当我的有理数类的属性的数值、名称等修改时,因为属性定义为private,所以不影响;但当属性的类型变化时,如分子的int型修改为double型时,会影响到他人调用我的有理数类代码。

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

大部分方法需要被其他类调用,设置为public方法是合适的。
而将属性设置为private可以保证数据的安全性,也有部分辅助类方法设置为private,这些方法不需要被调用,例如如我的有理数类中的求最大公约数的方法就设置为private。

标签:有理数,int,System,互评,println,Java,public,out
来源: https://www.cnblogs.com/cjt0722/p/13766211.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有