java有理数的除法运算,Java互评-有理数的设计

目录

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

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());

}

}

运行结果:

2fae28c2bd082aa0734b641a083a5679.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值