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 ... 
随机推荐
- jquery 遮罩层指定位置
			.css .datagrid-mask-msg { position: absolute; top: %; margin-top: -20px; padding: 12px 5px 10px 30px ... 
- Python基础入门-集合
			今天给大家分享的是python中集合(set)的概念,集合这个词其实和高中学的数学集合的概念很相近,或者作为初学者你就可以把它理解为数学当中的集合.在python中集合(set)是由一个个键组成的,但 ... 
- LSI SAS3IRCU配置SAS3系列RAID卡
			LSI SAS3IRCU配置SAS3系列RAID卡 一.适用的controller LSISAS3008 LSISAS3004 二.名词解释 Controller: IR: Volume: 卷,基于物 ... 
- .net core 图片合并,图片水印,等比例缩小,SixLabors.ImageSharp
			需要引用 SixLabors.ImageSharp 和SixLabors.ImageSharp.Drawing 引用方法 NuGet包管理 添加程序包来源 https://www.myget.org/ ... 
- IEnumerable、GetEnumerator、IEnumerator之间的关系。
			了解了这些也就明白了遍历的原理,晚安. using System; using System.Collections; public class Person { public Person(stri ... 
- lower_bound下确界
			//lower_bound用于找到首个大于等于某个值的元素 #include<algorithm> #include<iostream> using namespace std ... 
- dsp之BF531笔记
			获得更多资料欢迎进入我的网站或者 csdn或者博客园 很久以前的BF531的笔记,觉得有用分享出来.摘自于open dsp 通用Gpio ADSP-BF53x 处理器上有16 个PF 接口,这些接口就 ... 
- SpringCloud文章
			ZUUL路由服务遇到的坑:https://www.jianshu.com/p/2af5171fa2f3 springcloud----Zuul动态路由:https://blog.csdn.net/u0 ... 
- Matlab2015 双目相机自动标定
			标定步骤 调出标定工具箱 在命令行输入stereoCameraCalibrator,出现如下界面: 勾选相应的选项 然后将上面的“Skew”.“Tangential Distortion”以及“3 C ... 
- 自旋锁Spin lock与互斥锁Mutex的区别
			POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API.线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用 ... 
