有理数类设计

有理数类设计

一.有理数类代码

package com.company;
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)//构造函数
{

int gcd=gcd(numerator,denominator);
this.numerator=((denominator>0)?1:-1)*numerator/gcd;
this.denominator=Math.abs(denominator)/gcd;
}
private static int gcd(int n,int d)//辗转相除法,求最大公约数
{

int n1=Math.abs(n);
int n2=Math.abs(d);
int tmp;
while (n2 != 0) {

tmp = n1 % n2;
n1 = n2;
n2 = tmp;
}
return n1;
}
public Rational add(Rational secondRational)//加法
{

int n=this.numerator*secondRational.getDenominator()+
this.denominator*secondRational.getNumerator();
int d=this.denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational subtract(Rational secondRational)//减法
{

int n=this.numerator*secondRational.getDenominator()-
this.denominator*secondRational.getNumerator();
int d=this.denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational multiply(Rational secondRational)//乘法
{

int n=this.numerator*secondRational.getNumerator();
int d=this.denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational divide(Rational secondRational)//除法
{

int n=this.numerator*secondRational.getDenominator();
int d=this.denominator*secondRational.getNumerator();
return new Rational(n,d);
}
public String toString()//转换为字符串类型
{

if (this.denominator==1)
{

return this.numerator+"";
}else{

return this.numerator+"/"+this.denominator;
}
}
public boolean equals(Rational secondRational)//判断是否相等
{

if (this.subtract(secondRational).getNumerator()==0)
return true;
else
return false;
}
public int compare(Rational secondRational)//比较大小
{

if (this.subtract(secondRational).getNumerator()>0)
return 1;
else if (this.subtract(secondRational).getNumerator()==0)
return 0;
else
return -1;
}
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 this.numerator*1.0/this.denominator;
}
}

二.测试代码

import com.company.Rational;
public class Main {

public static void main(String[] args){

Rational x=new Rational(2,3);
Rational y=new Rational(4,5);
System.out.println(x.toString());
System.out.println(y.toString());
System.out.println(x.add(y));
System.out.println(x.subtract(y));
System.out.println(x.multiply(y));
System.out.println(x.divide(y));
System.out.println(x.equals(y));
System.out.println(x.compare(y));
System.out.println(x.intValue());
System.out.println(x.longValue());
System.out.println(x.floatValue());
System.out.println(x.doubleValue());
}
}

运行结果截图

有理数类设计

三.讨论

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

面向过程的C语言是对程序的执行过程的编写, 而面向对象编程是编写出很多功能性的代码,主要是对类的编写,在运用的时候很多时候只需要调用就可以了。

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

导入自己编写的有理数类

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

会依赖,不影响。

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

只需要调用就可以了。

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

导入自己编写的有理数类

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

会依赖,不影响。

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

合适,因为有的方法只能运用在类中,不能随便更改,需要通过public的方法访问该方法,保证数据的安全性。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114442.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 根据经纬度计算两点之间的距离的公式是_知道两点经纬度求距离

    根据经纬度计算两点之间的距离的公式是_知道两点经纬度求距离//距离单位米publicstaticdoublealgorithm(doublelongitude1,doublelatitude1,doublelongitude2,doublelatitude2){doubleLat1=rad(latitude1);//纬度doubleLat2=rad(latitude2);doublea=Lat1-Lat2;//…

  • 实战篇-OpenSSL之TripleDES加密算法-CFB64模式[通俗易懂]

    本文属于《OpenSSL加密算法库使用系列教程》之一,欢迎查看其它文章。实战篇-OpenSSL之TripleDES加密算法-CFB64模式一、TripleDES简介二、CFB64模式1、命令行操作2、函数说明3、编程实现(1)特别注意(2)实现CFB64模式加解密(3)测试代码一、TripleDES简介3DES又称TripleDES,是DES加密算法的一种模式,它使用2条不同的56位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年

  • python常用模块大全_日常办公会用到的python模块

    python常用模块大全_日常办公会用到的python模块mathmath.ceil(a):用来返回≥a的最小整数math.floor(a):用来返回≤a的最大整数round(a[,b])如果没有参数b,只有a,round()作用是四舍五入如果

  • python语言介绍

    python语言介绍Python是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。发展历程自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程。Python的创始人为GuidovanRossum。1989年圣诞节…

  • Matlab画图颜色设置

    Matlab画图颜色设置注意:MATLAB中调色板色彩强度[0,1],0代表最暗,1代表最亮。     常用颜色的RGB值  ——————————————–  颜色  R G B  &…

  • 一篇文章,Vue快速入门!!!

    一篇文章,Vue快速入门!!!①Vue概述及第一个Vue程序(HelloWorld)1.1什么是MVVMMVVM(Model-View-ViewModel)是一种软件设计模式,由微软WPF(用于替代WinForm,以前就是用这个技术开发桌面应用程序的)和Silverlight(类似于JavaApplet,简单点说就是在浏览器上运行WPF)的架构师KenCooper和TedPeters开发,是一种简化用户界面的事件驱动编程方式。由JohnGossman(同样也是WPF和Sliverlight的架构师)与2005年在他的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号