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实现分数的四则运算的更多相关文章

  1. 2019.3.13 Java的特性——继承

    继承 面向对象编程(OOP)三大特征:继承,封装,多态 目的:为了减少重复代码,避免复制粘贴 创建父类Animal public class Animal { private String name; ...

  2. 2019/05/13 JAVA虚拟机堆内存调优

    -Xms4000m 堆内存初始值 * -Xmx4000m 堆内存最大值 * -XX:+PrintGCDetails 打印GC信息 * -XX:+UseSerialGC 使用串行GC * -XX:+Pr ...

  3. 2019秋招Java面经(未完待续)

    2019秋招Java面经(凭记忆回忆, 可能不准) 随着我们从大三升到大四...秋招也开始了. 秋招进行的还比较顺利, 刚开始没几天, 我的秋招就结束了. 到现在我玩了差不多十多天了, 总想着总结一下 ...

  4. 每日一练ACM 2019.04.13

    2019.04.13 第1002题:A+B Proble Ⅱ Problem DescriptionI have a very simple problem for you. Given two in ...

  5. JAVA实现简单的四则运算

    GitHub 项目地址 https://github.com/745421831/-/tree/master PSP PSP2.1 Personal Software Process Stages 预 ...

  6. Java入门练习之四则运算

    Java入门练习之四则运算 项目目的 制作一个Java控制台程序,让他可以随机生成四则运算,并针对用户的输入判断对错. 项目分析 该项目本质上是一个四则运算出题器,可以创建一个Question类,其中 ...

  7. 【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 ...

  8. Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用

    ylbtech-Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用 1.返回顶部 1. Java 实例 - for 和 foreach循环使用 ...

  9. Java-Runoob-高级教程-实例-数组:13. Java 实例 – 数组交集

    ylbtech-Java-Runoob-高级教程-实例-数组:13. Java 实例 – 数组交集 1.返回顶部 1. Java 实例 - 数组交集  Java 实例 以下实例演示了如何使用 reta ...

随机推荐

  1. .Net插入大批量数据

    1. 使用SqlDataAdapter /// <summary>        /// 实现数据库事务,大批量新增数据        /// </summary>       ...

  2. ajax data参数

    表单 使用serializeArray获取所有: <form id='addForm' action='UserAdd.action' type='post'> <label for ...

  3. HTML & CSS设计与构建网站 ([美]达科特) PDF原版​

    HTML & CSS 设计与构建网站采用有别于许多传统编程书籍的新颖编排方式,将使您收到事半功倍的学习效果.每一页都在短小精悍的示例代码的引导下,简明直观.直截了当地阐述一个新主题. < ...

  4. netty使用以及聊天小程序

    <从零开始搭建游戏服务器>Netty导入创建Socket服务器 Netty入门教程 Netty 聊天小程序

  5. 【大数据系统架构师】0.1 Java编程基础

    1. 初识Java 2. Java语法 快速入门点我 2.1 数据类型和运算符 2.2 流程控制语句 2.3 数组 2.4 类和对象 2.5 OOP三大特性 2.6 集合框架与泛型 2.7 反射机制 ...

  6. Django权限控制进阶

    一.一级菜单的排序 我们用字典存放菜单信息,而字典是无序的,当一级菜单过多时可能会出现乱序情况,因此需要给一级菜单排序 1.给一级菜单表的model中加一个weight权重的字段 ,权重越大越靠前 w ...

  7. Linux 调节分辨率

    首先,你要有 GUI 才能设置分辨率 Tool of xrandr xrandr -s 1360x768

  8. FireFox调试代码技巧

    本文版权归 csdn DyncRole 所有,此处为技术收藏,如有再转请标明原创作者及出处,以示尊重! 作者:DyncRole 原文:http://blog.csdn.net/qqhjqs/artic ...

  9. postgress数据库 出现大写字母 字段名但是提示说不存在

    select BSK001 from dbdata 报错: column "bsk001" of relation "dbdata" does not exis ...

  10. jenkins安装maven工具

    下载maven工具,然后解压到/usr/local下面 然后在jenkins上面添加maven工具.指定他的设置配置文件(全局) 指定maven的目录位置 应用保存即可 !!! 虽然maven安装简单 ...