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());
}
}
运行结果:
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
还没有评论,来说两句吧...