2019.3.13 Java实现分数的四则运算
Java实现分数的四则运算
自己的写法
markdown太久没写格式不会用了--将就着看
- Fraction.java
package com.lanou;
public class Fraction {
private int numerator1; //定义属性:分子1
private int denominator1; //定义属性:分母1
private String operator; //定义属性:运算符
private int numerator2; //定义属性:分子2
private int denominator2; //定义属性:分母2
//构造方法
//constructor生成
public Fraction(int numerator1, int denominator1, String operator, int numerator2, int denominator2) {
this.numerator1 = numerator1;
this.denominator1 = denominator1;
this.operator = operator;
this.numerator2 = numerator2;
this.denominator2 = denominator2;
}
//加法
public void addition() {
int x = numerator1 * denominator2 + numerator2 * denominator1;
int y = denominator1 * denominator2;
gcd(x,y);
}
//减法
public void subtraction() {
int x = numerator1 * denominator2 - numerator2 * denominator1;
int y = denominator1 * denominator2;
gcd(x,y);
}
//乘法
public void multiplication(){
int x = numerator1 * numerator2;
int y = denominator1 * denominator2;
gcd(x,y);
}
//除法
public void division(){
int x = numerator1 * denominator2;
int y = denominator1 * numerator2;
gcd(x,y);
}
//欧几里得+判断输出
public int gcd(int m,int n) {
//定义四个空变量
int r;
int t;
int u;
int w;
//t和w用来存储分子和分母的初始数据
t = m;
w = n;
//求最大公因数
while (n != 0) {
r = m % n;
m = n;
n = r;
}
//循环结束后此时m即为最大公因数
//放个u = m看着方便
u = m;
//分子分母分别除以最大公因数
t = t / u;
w = w / u;
//判断+输出
//分子分母都为1 直接输出1
if(t == 1 && w == 1){
System.out.println("1");
}
//分子为0 分母不为0 直接输出0
else if(t == 0 && w != 0){
System.out.println("0");
}
//分子分母都不为0且不为1 直接输出
else {
System.out.println(t + "/" + w);
}
return 0;
}
}
- MainClass.java
package com.lanou;
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
System.out.println("请输入按分子1分母1运算符分子2分母2的形式输入数据");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
String o = scanner.next();
int c = scanner.nextInt();
int d = scanner.nextInt();
//判断分母是否为0 若为0重新输入 不为0继续判断
if (b == 0 || d == 0){
System.out.println("分母不能为零,请重新输入");
a = scanner.nextInt();
b = scanner.nextInt();
o = scanner.next();
c = scanner.nextInt();
d = scanner.nextInt();
}
//判断o中是否是运算符
if (!o.equals("+") && !o.equals("-") && !o.equals("*") && !o.equals("/")){
System.out.println("运算符输入错误,请重新输入");
a = scanner.nextInt();
b = scanner.nextInt();
o = scanner.next();
c = scanner.nextInt();
d = scanner.nextInt();
}
Fraction fraction = new Fraction(a, b, o, c, d);
if (o.equals("+")){
fraction.addition();
}
else if (o.equals("-")){
fraction.subtraction();
}
else if (o.equals("*")){
fraction.multiplication();
}
else if (o.equals("/")){
fraction.division();
}
}
}
大仁哥的写法
/**
* @author lizhongren1.
*/
public class Fraction {
// 分子(numerator)
private int ntNum;
// 分母(Denominator)
private int doNum;
// 构造方法, 这里没写空的构造方法, 换句话说就是要求必须要有分子和分母.
public Fraction(int ntNum, int doNum) {
this.ntNum = ntNum;
this.doNum = doNum;
if (doNum == 0){
// 分母不能为0
System.out.println("分母不能为0, 已经改为1");
this.doNum = 1;
}
// 创建新分数之后进行约分处理
reduce();
}
// 分数加法
public Fraction add(Fraction f){
// a/b + c/d
// 生成新的分子: a * d + b * c
int newNt = ntNum * f.getDoNum() + doNum * f.getNtNum();
// 生成新的分母: b * d
int newDo = doNum * f.getDoNum();
// 使用新的分子分母创建一个新的分数对象
Fraction newF = new Fraction(newNt, newDo);
return newF;
}
// 约分方法: 把分数化为最简分数, 即 6/12 化为 1/2
// 此方法和下一个方法都不想让外部调用, 因此设置为private
private void reduce(){
// 获得最大公约数
int m = maxDe(ntNum, doNum);
ntNum = ntNum / m;
doNum = doNum / m;
}
// 最大公约数: 使用辗转相除法(又名欧几里德算法, 别问我怎么来的, 去问欧几里德)
private int maxDe(int a, int b){
while(b != 0)
{
int r = a % b;
a = b;
b = r;
}
return a;
}
// 输出字符串, 按照 分子/分母的形式输出
@Override
public String toString() {
// 分子为0时输出0
if (ntNum == 0){
return "0";
}
// 分子分母相同时输出1
if (ntNum == doNum){
return "1";
}
// 其余方式按 分子/分母 输出
return ntNum + "/" + doNum;
}
// getter/setter方法
public int getNtNum() {
return ntNum;
}
public void setNtNum(int ntNum) {
this.ntNum = ntNum;
}
public int getDoNum() {
return doNum;
}
public void setDoNum(int doNum) {
this.doNum = doNum;
}
// main方法测试
public static void main(String[] args) {
Fraction f1 = new Fraction(1,3);
Fraction f2 = new Fraction(4,9);
// 分数f1 加上 分数f2
Fraction nf = f1.add(f2);
System.out.println(nf);
System.out.println(nf.add(new Fraction(9,12)));
}
}
输入与输出
测试数据
输入格式:分子1 回车 分母1 回车 运算符 回车 分子2 回车 分母2 回车
1/4+1/4

0/4+0/4

4/0+4/0

2019.3.13 Java实现分数的四则运算的更多相关文章
- 2019.3.13 Java的特性——继承
继承 面向对象编程(OOP)三大特征:继承,封装,多态 目的:为了减少重复代码,避免复制粘贴 创建父类Animal public class Animal { private String name; ...
- 2019/05/13 JAVA虚拟机堆内存调优
-Xms4000m 堆内存初始值 * -Xmx4000m 堆内存最大值 * -XX:+PrintGCDetails 打印GC信息 * -XX:+UseSerialGC 使用串行GC * -XX:+Pr ...
- 2019秋招Java面经(未完待续)
2019秋招Java面经(凭记忆回忆, 可能不准) 随着我们从大三升到大四...秋招也开始了. 秋招进行的还比较顺利, 刚开始没几天, 我的秋招就结束了. 到现在我玩了差不多十多天了, 总想着总结一下 ...
- 每日一练ACM 2019.04.13
2019.04.13 第1002题:A+B Proble Ⅱ Problem DescriptionI have a very simple problem for you. Given two in ...
- JAVA实现简单的四则运算
GitHub 项目地址 https://github.com/745421831/-/tree/master PSP PSP2.1 Personal Software Process Stages 预 ...
- Java入门练习之四则运算
Java入门练习之四则运算 项目目的 制作一个Java控制台程序,让他可以随机生成四则运算,并针对用户的输入判断对错. 项目分析 该项目本质上是一个四则运算出题器,可以创建一个Question类,其中 ...
- 【Java】-NO.13.Java.1.Foundation.1.001-【Java IO】-
1.0.0 Summary Tittle:[Java]-NO.13.Java.1.Foundation.1.001-[Java IO]- Style:Java Series:Foundation Si ...
- Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用
ylbtech-Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用 1.返回顶部 1. Java 实例 - for 和 foreach循环使用 ...
- Java-Runoob-高级教程-实例-数组:13. Java 实例 – 数组交集
ylbtech-Java-Runoob-高级教程-实例-数组:13. Java 实例 – 数组交集 1.返回顶部 1. Java 实例 - 数组交集 Java 实例 以下实例演示了如何使用 reta ...
随机推荐
- 线程同步synchronized,wait,notifyAll 测试示例
https://www.cnblogs.com/LipeiNet/p/6475851.html 一 synchronized synchronized中文解释是同步,那么什么是同步呢,解释就是程序中 ...
- PHP解决跨域访问的问题
在控制器的第一行放如下代码即可解决 header('Access-Control-Allow-Origin: http://ding.taozugong.com'); header('Access-C ...
- CMake使用技巧
前面有提到使用CMake.很多朋友提到也用过一下,没感觉它有什么好用,不知道怎么用之类. 我必要来说明一下. CMake的语法比较差,不是很优美,不是它不能用一个更好的语法,而是有一个关键优势:简单. ...
- 百度图片API
转载请注明出处:http://blog.csdn.net/yuanwofei/article/details/16343743 一.通用api http://image.baidu.com/i?tn= ...
- [database] postgresql 外网访问
配置 环境 ubuntu 14.04 LTS 版本 postgresql version 9.3 修改监听地址 编辑 /etc/postgresql/9.3/main/postgresql.conf ...
- SharePoint 2013报错之“指定的文件不是有效的电子表格或者没有包含要导入的数据”
当你尝试用SharePoint 2013中的“导入电子表格”功能时,可能会遇到报错“指定的文件不是有效的电子表格或者没有包含要导入的数据” 解决方法:只需要将你的SharePoint网址添加到浏览器的 ...
- sql server重建系统数据库
方法一:https://bbs.csdn.net/topics/100013082 方法二:http://blog.51cto.com/jimshu/1095780 *** 方法三:https://b ...
- Android日期时间选择器DatePicker、TimePicker日期时间改变事件响应(Android学习笔记)
activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- Xcode打包提交至itunes connect后,提交审核成功,随后出现二进制文件无效
1.问题描述 Xcode打包提交至itunes connect后,提交审核成功,应用处于待审核状态,过了大概半个小时状态更改为二进制文件无效 2.原因分析 2.1 登陆在苹果中预留的邮箱 ---- 邮 ...
- sql中日期转换
date_format的函数使用令日期格式转换变得十分便捷首先先说一个自己粗心踩到的坑.因为最开始自己建的表里面存的数据,已经固定是周一的时间了,然后有一个状态判断是需要拿到所有周一是否有数据,当时忘 ...