有理数类的设计

一.代码

package Main01;

public class Rational {
    private long numerator = 0;//分子 
    private long denominator = 1;//分母 
public Rational() {       //构建函数 
         this(0, 1);
 }
public Rational(long numerator, long denominator) {

  long gcd = gcd(numerator, denominator);
  this.numerator = ((denominator > 0) ? 1 : -1) * numerator / gcd;
  this.denominator = Math.abs(denominator) / gcd;
 }
private long gcd(long n, long d) {
  long n1 = Math.abs(n);
  long n2 = Math.abs(d);
  int gcd = 1;

 for (int k = 1; k <= n1 && k <= n2; k++) {
   if (n1 % k == 0 && n2 % k == 0) {
    gcd = k;
   }
  }

  return gcd;
 }

public long getNumerator() {
  return numerator;
 }

public long getDenominator() {
  return denominator;
 }

public Rational add(Rational secondRational) { // 相加
  long n = numerator * secondRational.getDenominator() + denominator * secondRational.getNumerator();
  long d = denominator * secondRational.getDenominator();
  return new Rational(n, d);
 }

public Rational subtract(Rational secondRational) { // 相减
  long n = numerator * secondRational.getDenominator() - denominator * secondRational.getNumerator();
  long d = denominator * secondRational.getDenominator();
  return new Rational(n, d);
 }

public Rational mulitiply(Rational secondRational) { // 相乘
  long n = numerator * secondRational.getNumerator();
  long d = denominator * secondRational.getDenominator();
  return new Rational(n, d);

 }

public Rational divide(Rational secondRational) { // 相除
  long n = numerator * secondRational.getDenominator();
  long d = denominator * secondRational.numerator;
  return new Rational(n, d);
 }
public String toString() {
 if(denominator == 1) {
  return numerator+"";
 }
 else {
  return numerator+"/"+denominator;
 }
}
}

二.测试代码

package cn.goktech;
import Main01.Rational;
public class Text01 {
 //
 public static void main(String[] args) {
  Rational r1 = new Rational(1, 3);
  Rational r2 = new Rational(1, 2);
  System.out.println("r1+r2 = " + r1.add(r2).toString());
  System.out.println("r1-r2 = " + r1.subtract(r2).toString());
  System.out.println("r1*r2 = " + r1.mulitiply(r2).toString());
  System.out.println("r1/r2 = " + r1.divide(r2).toString());
 }

}

三.运行截图

四.疑难问题和解决方法

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

答:c语言相比java更加面向过程,需要你自己思考一个函数来完成它。而java是对类的编写,可以直接进行调用。

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

答:导入自己编写的有理数的包

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

答:依赖;不会影响。

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

答:合适,因为private是私有的而puclic是公有的,并且private只可在该类中使用,可以保护一些重要的的代码不被篡改

posted @ 2020-10-04 10:21  祖国庇佑我  阅读(130)  评论(0编辑  收藏  举报