概述

通过前几节课我们学习了Java中对象类的属性,方法,构造方法,封装等相关知识,这节课通过一个分式计算器项目来练习Java类的知识。分式由两个部分组成:分子和分母,在本项目中需要定义两个类,Fraction类,是一个对象类,这个类中定义了分式的属性,构造方法和分式的运算方法。FrationCalculator类是一个客户类,这个类主要处理与用户的交互,调用Fraction类获取分式计算结果,并将结果返回给用户。

Fraction类

属性

定义两个private的整型变量,名称分别为numerator和denominator

构造方法

第一个构造方法是有两个形参,通过两个形参来初始化类的numerator和denominator属性

如果用户输入的denominator是0,则抛出IllegalArgumentException()的异常

如果用户输入的denominator是负值,则将符号转移到numerator中,例如,输入-3/-5,则返回3/5,输入3/-5,则返回-3/5

例如: Fraction myFraction = new Fraction(3, 5), 则myFraction的numerator = 3, denominator = 5。

第二个构造方法是有一个形参,通过该形参来初始化类的numerator属性

将denominator的值设为默认值1

例如:Fraction myFraction = new Fraction(3) ,则myFraction的numerator = 3, denominator = 1

第三个构造方法是没有形参

将numerator的值设为默认值0,将denominator的值设为默认值1

例如: Fraction myFraction = new Fraction(), 则myFraction的numerator = 0,denominator = 1,分式的值为0

在程序的后两个构造方法中,我们要尽量借助this关键字利用前一个构造方法来简化代码。

方法

方法名

参数

返回值

描述

getNumerator()

none

int

返回分式中numerator的值

getDenominator()

none

int

返回分式中denominator的值

toString()

none

String

以"numerator/denominator"的格式返回分式的值

toDouble()

none

double

计算分式的值,返回double类型的计算结果

add()

Fraction other

Fraction

返回与另一个分式相加以后的分式

subtract()

Fraction other

Fraction

返回与另一个分式相减以后的分式

multiply()

Fraction other

Fraction

返回与另一个分式相乘以后的分式

divide()

Fraction other

Fraction

返回与另一个分式相除以后的分式

equals()

Object other

boolean

检查两个分式是否相等

toLowestTerms()

none

none

对分式进行约分

gcd()

int num, int den

int

返回两个整数的最大公约数,定义为static方法

equals()

重写Object类的public boolean equals(Object other)方法。首先判断对象是否是Fraction类,然后判断传入的分式与当前分式是否相等。

注意: 1/2与2/4比较,结果返回true。

toLowestTerms()

将分式的分子与分母进行约分操作,更新分式numerator和denominator的属性值,保持分式整体的值不变。约分的关键是找到分子与分母的最大公约数,关于求最大公约数的算法,以下是辗转相除法的伪代码:

if a equals b

return a or b;

find the reminder of a dived by b

if reminder equals zero

return b

else

set a to b

set b to reminder

FractionCalculator类

在这个类中,我们打印信息到控制台,接收用户从控制台输入的信息,对信息进行处理,并返回结果。

程序逻辑

首先,输出提示信息,让用户输入操作符(+,-,/,*,=),如果用户输入q或Q,则退出程序。

用户输入操作符,检查用户输入的操作符是否合法,不合法则提示用户重新输入,直到用户输入合法操作符

提示用户输入第一个分式,检查用户输入的分式是否合法,不合法则提示用户重新输入,直到用户输入的分式合法

提示用户输入第二个分式,检查用户输入的分式是否合法,不合法则提示用户重新输入,直到用户输入的分式合法

打印计算结果

This program is a fraction calculator

It will add, subtract, multiply and divide fractions until you type Q to quit.

Please enter your fractions in the form a/b, where a and b are integers.

Please enter an operation (+, -, /, *, = or Q to quit)+

Please enter first fraction (a/b) or integer (a): 1/2

Please enter second fraction (a/b) or integer (a): 1/4

1/2 + 1/4 = 3/4

Please enter an operation (+, -, /, *, = or Q to quit)-

Please enter first fraction (a/b) or integer (a): 2/3

Please enter second fraction (a/b) or integer (a): 1/3

2/3 - 1/3 = 1/3

Please enter an operation (+, -, /, , = or Q to quit)

Please enter first fraction (a/b) or integer (a): 1/4

Please enter second fraction (a/b) or integer (a): 3/5

1/4 * 3/5 = 3/20

Please enter an operation (+, -, /, *, = or Q to quit)/

Please enter first fraction (a/b) or integer (a): 3/5

Please enter second fraction (a/b) or integer (a): 2/5

3/5 / 2/5 = 3/2

Please enter an operation (+, -, /, *, = or Q to quit)=

Please enter first fraction (a/b) or integer (a): 1/4

Please enter second fraction (a/b) or integer (a): 2/8

1/4 = 2/8 is true

Please enter an operation (+, -, /, *, = or Q to quit)q

Process finished with exit code 0

附录

关于该项目的示例代码,可以从GitHub中下载Project - FracCalc。

分式加法JAVA程序_十五:实战2-分式计算器相关推荐

  1. java学习记录十五:集合二Collections、Set、Map

    java学习记录十五:集合二 一.Collections工具类 一.解释 二.常用方法 1.打乱集合顺序 2.按照默认规则排序 3.按指定规则排序 4.批量添加元素 二.可变参数 一.解释 二.写法 ...

  2. Java学习 第十五天

    Java学习 第十五天 第一章 StringBuilder类 1.1 字符串的不可变 1.2 StringBuilder概述 1.3 构造方法 1.4 两个常用方法 1.4.1 append方法 1. ...

  3. 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++

    第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++ 准备代码: 第一次编译: 显然需要先配置环境变量: 先找到java.exe和javac.exe所在的文件夹位置: 此电脑-& ...

  4. 漫谈程序员(十五)——应届毕业生上海市落户政策解读

    #漫谈程序员(十五)--应届毕业生上海市落户政策解读   去上海BOC工作,不免考虑是否需要将户口迁移过去.下面就结合<2016年非上海生源普通高校应届毕业生进沪就业评分办法>文件进行详细 ...

  5. linux exec 二程序,二十五、Linux 进程与信号---exec函数

    25.1 介绍 在用 fork 函数创建子进程后,子进程往往要调用一种 exec 函数以执行另一个程序 当进程调用一种 exec 函数时,该进程完全由新程序代换,替换原有进程的正文,而新程序则从其 m ...

  6. 2017面向对象程序设计(Java)第十五周学习总结

    上周,老师要求同学们自学应用程序部署,并布置了相关的实验任务.此次实验的目的是掌握Java应用程序的打包操作:了解应用程序存储配置信息的两种方法: 了解Applet小应用程序的开发及应用方法:掌握基于 ...

  7. 成就Java程序员十大过程

    学习java这么久,见到过项目中的神人在键盘上运指如飞的编程速度,当时就被震撼了.当编程越来越成体力活,我们还能有自己的思想,还能修炼为Java系统级别的程序员嘛?学习与修炼以下知识与技能,帮你早日达 ...

  8. Java(第十五章)

    第十五章 一.字符串类String 1.String是一个类,位于java.lang包中 2.创建一个字符串对象的2种方式: String 变量名="值"; String 对象名= ...

  9. qtp启动java程序_转: QTP六脉神剑之调用Java程序

    查看( 1147 ) / 评论( 21 ) 六脉神剑之调用程 序0Xp1zLN_0版权声明:原创作品,转载请以链接方式注明出自http://www.51testing.com/?35,否则将追究法律责 ...

最新文章

  1. android地址格式转换,Android(安卓)时间戳和日期之间的转化
  2. Understanding Global Unicast IPv6 Addressing
  3. Android程序获得APP哈希值,Android – SMS Retriever API – 计算应用程序的哈希字符串问题...
  4. 谷歌开发者工具详解 Network篇
  5. ffmpeg avi 1080P解析 编译选项
  6. Java动态解析域名
  7. 【mysql】mysql优化
  8. surging 微服务引擎 2.0 会有多少惊喜?
  9. 信息学奥赛一本通 2048:【例5.18】串排序
  10. 往hbase插入数据,你会选择哪种?
  11. window下配置定时任务实现类似linux的cron定时任务
  12. 一个完整的c语言程序~~简单的实例
  13. java案例-酒店管理系统(ssm+mysql+nginx)
  14. NCCN指南下载以后无法复制,粘贴原因及PDF密码破解
  15. Android 第三方SDK的检测与提取
  16. 从《我不是潘金莲》谈程序员的核心竞争力
  17. 路由器、交换机的基本配置 1
  18. Jenkins自动化部署(java+maven+tomcat项目)
  19. 在cmd中进入mysql的步骤
  20. MySQL5.6建索引时遇到 Specified key was too long; max key length is 767 bytes错误提示解决办法

热门文章

  1. 端午节蓝屏之谜:金山系列软件同微软KB2839229冲突技术分析
  2. 中学物理教学参考杂志社中学物理教学参考编辑部2022年第21期目录
  3. Typecho博客后台登录页面美化插件
  4. 【先进事迹】11111HTML
  5. [ROC-RK3399-PC Pro] 手把手教你移植主线U-Boot(基于v2022.04-rc5版本)
  6. 手机ANR问题处理方法及策略
  7. EOS竞选在即,5月跌出翔,6月心飞扬!
  8. 2020604 Java基础复习
  9. 微信小程序HTTPS证书部署案例
  10. 【项目经验】--环保项目