要实现Rational类的加减乘除,要实现其可比较性,要覆盖toString()方法,要实现不同数据类型的转换等。

 package chapter14;

 public class Rational extends Number implements Comparable {
private long numerator=0;
private long denominator=1; public Rational(){
this(0,1);
}
public Rational(long numerator, long denominator) {
// TODO Auto-generated constructor stub
long gcd=gcd(numerator,denominator);
this.numerator=((denominator>0)?1:-1)*numerator/gcd;
this.denominator=Math.abs(denominator)/gcd;
} private static long gcd(long n, long d) {
// TODO Auto-generated method stub
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 multiply(Rational sR){
long n=numerator*sR.getNumerator();
long d=denominator*sR.getDenominator();
return new Rational(n,d);
} public Rational divide(Rational sR){
long n=numerator*sR.denominator;
long d=denominator*sR.numerator;
return new Rational(n,d);
} public String toString(){
if(denominator==1)
return numerator+"";
else
return numerator+"/"+denominator;
} public boolean equals(Object parm1){
if((this.subtract((Rational)(parm1))).getNumerator()==0)
return true;
else
return false;
} @Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
if((this.subtract((Rational)o)).getNumerator()>0)
return 1;
else if((this.subtract((Rational)o)).getNumerator()<0)
return -1;
else
return 0;
} @Override
public int intValue() {
// TODO Auto-generated method stub
return (int)doubleValue();
} @Override
public long longValue() {
// TODO Auto-generated method stub
return (long)doubleValue();
} @Override
public float floatValue() {
// TODO Auto-generated method stub
return (float)doubleValue();
} @Override
public double doubleValue() {
// TODO Auto-generated method stub
return numerator*1.0/denominator;
} }

  有理数封装在Rational对象中。在机器内部,有理数总表示为它的最简形式,分子决定有理数的符号,分母总为正数。

  gcd()方法是私有静态的。

  Object类中的toString方法和equals方法在Rational类中被覆盖。toString()方法以numerator/denominator的形式返回一个Rational对象的字符串表示。

  

Java 有理数类 分数类 Rational类的设计与实现的更多相关文章

  1. 中国MOOC_面向对象程序设计——Java语言_第1周 类与对象_1分数

    第1周编程题 查看帮助 返回   我们在题目说明中给出了一部分代码,你需要在这部分代码的基础上,按照题目说明编写代码,然后将两部分代码一起提交. 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨 ...

  2. 中国MOOC_面向对象程序设计——Java语言_第1周 类与对象

    第1周编程题 查看帮助 返回   我们在题目说明中给出了一部分代码,你需要在这部分代码的基础上,按照题目说明编写代码,然后将两部分代码一起提交. 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨 ...

  3. Core Java 总结(字符和字符串类问题)

    所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 字符,字符串类问题 正则表达式问题 J ...

  4. 一个Java文件至多包含一个公共类

    编写一个java源文件时,该源文件又称为编译单元.一个java文件可以包含多个类,但至多包含一个公共类,作为编译时该java文件的公用接口,公共类的名字和源文件的名字要相同,源文件名字的格式为[公共类 ...

  5. Java中是否可以调用一个类中的main方法?

    前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...

  6. 【实战Java高并发程序设计 1】Java中的指针:Unsafe类

    是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...

  7. Effective java笔记(三),类与接口

    类与接口是Java语言的核心,设计出更加有用.健壮和灵活的类与接口很重要. 13.使类和成员的可访问性最小化 设计良好的模块会隐藏起所有的实现细节,仅使用API与其他模块进行通信.这个概念称为信息隐藏 ...

  8. 关于java中接口定义常量和类定义常量的区别

    /** * * @author YZJ * @Description java中定义常量的最佳方法 */ public final class Contants{ /** * @Description ...

  9. Atitit java的异常exception 结构Throwable类

    Atitit java的异常exception 结构Throwable类 1.1. Throwable类 2.StackTrace栈轨迹1 1.2. 3.cause因由1 1.3. 4.Suppres ...

随机推荐

  1. PDF 补丁丁 0.4.1.728 测试版发布

    书签编辑器新增预览界面,可查看书签所连接到文档的页数. 该功能将继续完善,请各位关注.

  2. Matcher类:(转)

    Matcher类:     使用Matcher类,最重要的一个概念必须清楚:组(Group),在正则表达式中 ()定义了一个组,由于一个正则表达式可以包含很多的组,所以下面先说说怎么划分组的, 以及这 ...

  3. 解析网络json数据,模拟美团界面显示。

    <?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android=&q ...

  4. 分批次从musql取数据,每次取1000条

    $t = new Gettags(); $num=$t->sum_tag(); $num=$num/1000; $flag_num=ceil($num); $flag_array=array() ...

  5. Prime Palindromes

    题目大意:求出区间[a,b]之间的回文质数. a<=b<=10^8; 解题过程: 1.先打个素数表,新学了个 欧拉筛法,是对普通筛法的改进.普通筛法是每找到一个素数,就把它的所有倍数标记成 ...

  6. [开发笔记]-使用bat命令来快速安装和卸载Service服务

    一般我们在编写完Service服务程序后,都是通过cmd命令提示窗口来安装或卸载服务,但频繁的在cmd窗口中去“拼”文件的路径着实让人“不能忍”.所以,我们需要一钟“更快捷”的方式来进行安装或者卸载操 ...

  7. Windows的同步I/O和异步I/O

    同步I/O操作 执行步骤 1.        程序通过FileStream对象来打开磁盘文件,然后调用Read方法(内部调用Win32 ReadFile函数),从文件中读取数据.这时,线程从托管代码转 ...

  8. 解决python version 2.7 required,which was not find in the registry

    程序自动写注册表 http://www.vvivv.com/post-143.html 手工写 http://blog.csdn.net/baikaishui525/article/details/9 ...

  9. CCNA 6.3

    no encapsulation ppp(默认是encapsulation hdlc 在encapsulation ppp 后想要改回 hdlc 除了可用encapsulation hdlc外,还可以 ...

  10. 测试V模型

    一:测试V模型 RAD(Rap Application Development 快速引用开发)模型是软件开发过程中的一个重要模型,由于模型构图形似字母V,所以又称软件开发的V模型.他通过开发和测试同时 ...