要实现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对象的字符串表示。

中国MOOC&lowbar;面向对象程序设计——Java语言&lowbar;第1周 类与对象&lowbar;1分数

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

中国MOOC&lowbar;面向对象程序设计——Java语言&lowbar;第1周 类与对象

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

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

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

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

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

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

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

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

是第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...

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

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

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

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

Atitit java的异常exception 结构Throwable类

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

随机推荐

ABP Zero示例项目登录报错&OpenCurlyDoubleQuote;Empty or invalid anti forgery header token&period;”问题解决

ABP Zero项目,登录时出现如图"Empty or invalid anti forgery header token."错误提示的解决方法: 在 WebModule.cs的P ...

逐行扫描型Memory LCD显存管理与emWin移植

因为Memory LCD 的特性,不能设置像素坐标,只能用缓存整体刷新. 所以对于Memory LCD来说,emWin移植仅与打点函数有关,这里用Sharp Memory LCD(ls013b7dh0 ...

BZOJ 2080&colon; &lbrack;Poi2010&rsqb;Railway 双栈排序

2080: [Poi2010]Railway Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 140  Solved: 35[Submit][Statu ...

《JAVA NIO》读书笔记

第一章 简介 第二章 缓冲区 第三章  channel

简单3d RPG游戏 之 005 选择敌人

选择一个敌人,按ctrl+d,复制出3个,调整一下它们的位置,不重叠,修改Tag为Enemy,禁用EnemyAI. 创建Targetting脚本,绑定到Player玩家对象 public class ...

suse系统卸载数据库实例

1.停止数据库: 2.执行以下命令: find $ORACLE_BASE/* -name '*[Tt][Ee][Ss][Tt]*'  其中TEST为数据库的实例名: 删除存在的文件: 3.删除/etc ...

Oracle字符集查看

Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期 ...

【Java】 实现一个简单文件浏览器(2)

接着上篇文章 接下来说下程序右侧的文件内容表格如何实现 FileTable类: FileTable基础于JTable类,构造函数里用setDefaultRenderer设置每行默认的渲染器为FileT ...

C&num;方法参数--值参数,引用参数,输出参数

值参数: 使用值参数,通过复制实参的值到形参的方式,把数据传递到方法,方法被调用的时候,系统做如下操作: 在栈中为形参分配空间: 复制实参到形参. 注意:一个值参数的实参不一定是变量,它可以是任何能够 ...

Mathematik

Ausdruck auf Deutsch Lösen Problem der Abteilung. 求导. Die Abteilung von 3x ist 3. 3x的导数是3 Lösen Prob ...