c语言有理数字符形式,有理数类的设计

1.有理数类的代码

package cn.edu.jmu;

public class Rational {

private int numerator;//分子

private int denominator;//分母

public int getNumerator() {

return numerator;

}

public int getDenominator() {

return denominator;

}

//无参构造函数

public Rational () {

this.numerator = 0;

this.denominator = 1;

}

//有参构造函数

public Rational (int numerator, int denominator) {

if (numerator < 0 && denominator < 0) {

this.numerator = -numerator;

this.denominator = -denominator;

}else if (numerator > 0 && denominator < 0) {

this.numerator = -numerator;

this.denominator = -denominator;

}else {

this.numerator = numerator;

this.denominator = denominator;

}

}

//求最大公约数,化简用

private int gcd(int numerator, int denominator) {

int x = Math.abs(numerator);

int y = Math.abs(denominator);

int tmp;

while (y != 0) {

tmp = x % y;

x = y;

y = tmp;

}

return x;

}

//相加

public Rational add (Rational x) {

int numerator2 = numerator * x.denominator + x.numerator * denominator;

int denominator2 = denominator * x.denominator;

return new Rational(numerator2, denominator2);

}

//相减

public Rational subtract (Rational x) {

int numerator2 = numerator * x.denominator - x.numerator * denominator;

int denominator2 = denominator * x.denominator;

return new Rational(numerator2, denominator2);

}

//相乘

public Rational multiply (Rational x) {

int numerator2 = numerator * x.numerator;

int denominator2 = denominator * x.denominator;

return new Rational(numerator2, denominator2);

}

//相除

public Rational divide (Rational x) {

int numerator2 = numerator * x.denominator;

int denominator2 = denominator * x.numerator;

return new Rational(numerator2, denominator2);

}

//求绝对值

public Rational abs () {

int numerator2 = numerator;

int denominator2 = denominator;

if (numerator2 < 0) {

numerator2 = -numerator2;

}

if (denominator2 < 0) {

denominator2 = -denominator2;

}

return new Rational(numerator2, denominator2);

}

//判断是否相等

public boolean equals (Rational x) {

if (this.subtract(x).getNumerator() == 0) {

return true;

}else {

return false;

}

}

//比较大小,大于所比较的数返回1,小于返回-1,等于返回0

public int compareTo (Rational x) {

if (this.subtract(x).getNumerator() > 0) {

return 1;

}else if (this.subtract(x).getNumerator() < 0) {

return -1;

}else {

return 0;

}

}

//以字符串形式输出

public String toString () {

int t = gcd(numerator, denominator);

numerator /= t;

denominator /= t;

if(denominator == 1) {

return numerator+"";

}else if (numerator == 0) {

return 0+"";

}else {

return numerator + "/" + denominator ;

}

}

}

2.测试代码

package demo;

import cn.edu.jmu.Rational;

public class Main {

public static void main(String[] args) {

Rational s1 = new Rational(1, 2);

Rational s2 = new Rational(3, 4);

Rational s3 = new Rational(8, -7);

Rational s4 = new Rational(3, 4);

Rational s5 = new Rational();

System.out.println("s1+s2 = " + s1.add(s2).toString());

System.out.println("s1-s2 = " + s1.subtract(s2).toString());

System.out.println("s1*s2 = " + s1.multiply(s2).toString());

System.out.println("s1/s2 = " + s1.divide(s2).toString());

System.out.println("|s3| = " + s3.abs().toString());

System.out.println("判断s1与s2是否相等:" + s1.equals(s2));

System.out.println("判断s2与s4是否相等:" + s2.equals(s4));

System.out.println("s1与s2比大小:" + s1.compareTo(s2));

System.out.println("无参构造:" + s5.toString());

}

3.运行结果

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

c语言是以函数的形式编写,java是以类的形式编写,使用者在使用时只需导入即可,更加的方便,而且定义方法时可以进行重载,可为类似功能的方法提供统一名称,根据参数类型或个数的不同调用相对应的方法。而c语言一个函数只能有一种参数定义。

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

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

导入对应包中的有理数类。例:import cn.edu.jmu.Rational;

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

别人的代码依赖我的有理数类的属性。

当我的有理数类的属性修改时,因为属性设置为private,所以不影响他人调用有理数类的代码。

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

合适。

防止使用者对数据进行错误修改造成程序崩溃;辅助编写public方法的方法,不应被使用者调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值