用java有理数类包含加减乘除_用java具体代码实现分数(即有理数)四则运算

2023-11-11

用java具体代码实现分数(即有理数)四则运算

1,背景

Java老师布置了一个关于有理数运算的题目,因为参考书上有基本代码,所以自己主要是对书上代码做了一点优化,使其用户交互性更加友好以及代码封装性更强

2,说明:

分数也称作有理数,是我们很熟悉的一种数。有时希望程序能对分数进行四则运算,而且两个分数四则运算的结果仍然是分数。下面是具体实现

3,java代码具体实现

3.1 运算类封装

package Rational;

import java.util.StringTokenizer;

/**

* @author sunkun

* 分数四则运算

*/

public class Calculator {

int numerator; // 分子

int denominator; // 分母

Calculator(){

}

Calculator(int a,int b){

if(a == 0){

numerator = 0;

denominator = 1;

}

else{

setNumeratorAndDenominator(a,b);

}

}

void setNumeratorAndDenominator(int a, int b){ // 设置分子和分母

int c = f(Math.abs(a),Math.abs(b)); // 计算最大公约数

numerator = a / c;

denominator = b / c;

if(numerator<0 && denominator<0){

numerator = - numerator;

denominator = - denominator;

}

}

int getNumerator(){

return numerator;

}

int getDenominator(){

return denominator;

}

int f(int a,int b){ // 求a和b的最大公约数

if(a < b){

int c = a;

a = b;

b = c;

}

int r = a % b;

while(r != 0){

a = b;

b = r;;

r = a % b;

}

return b;

}

Calculator add(Calculator r){ // 加法运算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b + denominator * a;

int newDenominator = denominator * b;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

Calculator sub(Calculator r){ // 减法运算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b - denominator * a;

int newDenominator = denominator * b;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

Calculator muti(Calculator r){ // 乘法运算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * a;

int newDenominator = denominator * b;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

Calculator div(Calculator r){ // 除法运算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b;

int newDenominator = denominator * a;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

// 封装了具体运算,主要为对输入进行转换,对输出封装

public static void compute(String data1,String operation,String data2){

StringTokenizer fenxi = new StringTokenizer(data1,"/");

int data1_1 = Integer.parseInt(fenxi.nextToken());

int data1_2 = Integer.parseInt(fenxi.nextToken());

fenxi = new StringTokenizer(data2,"/");

int data2_1 = Integer.parseInt(fenxi.nextToken());

int data2_2 = Integer.parseInt(fenxi.nextToken());

Calculator r1 = new Calculator(data1_1,data1_2);

Calculator r2 = new Calculator(data2_1,data2_2);

Calculator result;

int a,b;

if(operation.equals("+")){

result = r1.add(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

if(operation.equals("-")){

result = r1.sub(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

if(operation.equals("*")){

result = r1.muti(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

if(operation.equals("/")){

result = r1.div(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

}

}

3.2 测试类

package Rational;

import java.util.Scanner;

/**

* @author sunkun

* 为了测试分数四则运算

* */

public class TestCal {

public static void main(String[] args) {

// TODO Auto-generated method stub

// 用户输入两分数和运算符

Scanner input = new Scanner(System.in);

System.out.println("请用户输入第一个分数(格式a/b)");

String data1 = input.next();

System.out.println("请用户输入要进行运算的运算符(+-*/)");

String operation = input.next();

System.out.println("请用户输入第二个分数(格式c/d)");

String data2 = input.next();

// 根据用户输入进行具体运算

Calculator cal = new Calculator();

System.out.println("运算结果为:");

cal.compute(data1, operation, data2);

// }

}

}

4,实验结果

123be3cc445dedb2657ba45eee5824c0.png

c4753c580a627a885ac0d04f865b3b2d.png

76740a888242216b2687a8108208b0c8.png

8c0e5748d7d3cd595ee090795eb9b7ca.png

5,备注

如果您有更好的想法或建议,欢迎留言,大家共同学习,相互提高

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用java有理数类包含加减乘除_用java具体代码实现分数(即有理数)四则运算 的相关文章

随机推荐

  • 华为传输服务器系统类型,服务器操作系统平台类型

    服务器操作系统平台类型 内容精选 换一换 云硬盘挂载至云服务器时 无法挂载 以下排查思路根据原因的出现概率进行排序 建议您从高频率原因往低频率原因排查 从而帮助您快速找到问题的原因 如果解决完某个可能原因仍未解决问题 请继续排查其他可能原因
  • 2022 年全国硕士研究生入学统一考试英语(二)试题

    2022年全国硕士研究生入学统一考试英语 二 试题 Section Use of English Directions Read the following text Choose the best word s for each numb
  • MySQL自学笔记详细版(从安装到入门)

    MySQL学习目录 前言 一 MySQL是什么 二 MySQL的好处 三 数据库的概念 1 DB database 2 DBMS Database Management System DBMS分为两类 3 SQL Structure Que
  • TypeError: unsupported operand type(s) for /: ‘NoneType‘ and ‘float‘

    可能有的小伙伴在使用opencv的时候会出现以下错误 这个错误的原因可能是图片读取失败 导致 img 变量为 NoneType 类型 在变量上执行除法运算时出现了 TypeError 所以就加了一个 if 条件判断 判断 img 是否为 N
  • VC++ UI布局管理器

    程序从codeproject上下载的 功能类似QT的QLayout 有了它界面缩放再也不会乱套了 具体使用方法可参考源码示例 资源下载链接地址 https download csdn net download u012156872 1926
  • PyTorch学习日志_20201031_数据并行处理

    日期 2020 10 31 主题 PyTorch入门 内容 根据PyTorch官方教程文档 学习如何使用数据并行 DataParallel 来使用多GPU 根据自己的理解和试验 为代码添加少量注解 具体代码如下 数据并行处理 导入和参数 i
  • c++——复制构造函数

    一 概述 复制构造函数作用 使用一个已经存在的对象去初始化同类的一个新对象 其形参是本类对象的引用 如果没有定义复制构造函数 编译器会在必要时自动生成一个隐含的复制构造函数 声明和实现复制构造函数 class 类名 public 类名 形参
  • Netty实战(八)引导

    引导 一 引导 1 1 什么是引导 1 2 Bootstrap 类 1 3 引导客户端和无连接协议 1 4 引导客户端 1 5 Channel 和 EventLoopGroup 的兼容性 二 引导服务器 2 1 ServerBootstra
  • Python:小数、百分比相互转化

    简介 实现小数和百分比相互转换 相关攻略 Python内置库 数据计算相关 math random 类型 主要分为以下5种情况处理 1 百分比转小数 2 小数转百分比 直接转可能存在尾数不足的情况 3 小数转百分比 注意是两个 4 小数转百
  • MySQL 中 MyISAM 与 InnoDB 引擎的区别

    分析 回答 区别很多 大家说出下面几点 面试就应该 OK 了 1 事务支持 MyISAM不支持事务 而InnoDB支持 InnoDB的AUTOCOMMIT默认是打开的 即每条SQL语句会默认被封装成一个事务 自动提交 这样会影响速度 所以最
  • KiCad使用笔记(03)-原理图绘制

    绘图过程 放置元件 绘制导线 编号元件 检查原理图 关联封装 生成网表 标题栏设置 相关视频教程 绘图过程 放置元件 放置元件可以点击右侧工具栏中放置元件 然后在工作区鼠标左键单击 在弹出的选项框中通过关键词搜索或是直接在下方列表中选择 可
  • ctf misc之MP3隐写

    2022 4 9 第一次写mp3隐写 走了好多坑记录一下 题目得到一个MP3文件和一个压缩包 然后听一遍这个歌发现最后面有一段非常违和的 用Audacity打开这个mp3 查找了一下MP3的隐写方法有以下几种 MP3编码隐写将数据隐藏在MP
  • 【Seata】00 - Seata Server 部署(Windows、Docker 基于 Jpom)

    文章目录 前言 参考目录 版本说明 Windows 部署 seata server 1 下载压缩包 2 文件存储模式 3 db 存储模式 3 1 建表 3 2 修改配置文件 3 3 启动脚本 4 源码部署 Docker 部署 seata s
  • Android MVP 框架搭建

    前言 本文主要根据自身项目的使用和对MVP的理解 搭建符合自身项目情况的MVP架构 关于MVP M Model 负责数据的请求 解析 过滤等数据操作 V View 负责处理UI 通常以Activity Fragment的形式出现 P Pre
  • 华为OD机试真题-打印文件

    题目描述 有5台打印机打印文件 每台打印机有自己的待打印队列 因为打印的文件内容有轻重缓急之分 所以队列中的文件有1 10不同的优先级一 其中数字越大优先级越高 打印机会从自己的待打印队列中选择优先级最高的文件来打印 如果存在两个优先级一样
  • 复旦微魔方FM33FR0xx——FL库笔记-定义

    fm33fr0xx h的定义 一 时钟定义 define RCHF INITIAL CLOCK 8000000 内部RC高频震荡器 8M define RCMF CLOCK 4000000 内部RC 4M振荡器 define LPOSC C
  • 判断考生成绩等级(switch case语句练习)

    判断考生成绩等级 1 考生成绩控制在 0 100 2 成绩 90 100 优 成绩 80 90 良 成绩 70 80 可 成绩 60 70 一般 成绩 0 60 不及格 要求使用switch语句 不能使用if语句 class SwitchT
  • 华为OD机试 - 区间交叠问题(Java)

    题目描述 给定坐标轴上的一组线段 线段的起点和终点均为整数并且长度不小于1 请你从中找到最少数量的线段 这些线段可以覆盖柱所有线段 输入描述 第一行输入为所有线段的数量 不超过10000 后面每行表示一条线段 格式为 x y x和y分别表示
  • 爬虫取中间文本_10 个爬虫工程师必备的工具

    阅读文本大概需要 6 分钟 工欲善其事必先利其器的道理相信大家都懂 而作为经常要和各大网站做拉锯战的爬虫工程师们 则更需要利用利用好身边的一切法器 以便更快的攻破对方防线 今天我就以日常爬虫流程 给大家介绍十款工具 相信大家掌握之后 必定能
  • 用java有理数类包含加减乘除_用java具体代码实现分数(即有理数)四则运算

    用java具体代码实现分数 即有理数 四则运算 1 背景 Java老师布置了一个关于有理数运算的题目 因为参考书上有基本代码 所以自己主要是对书上代码做了一点优化 使其用户交互性更加友好以及代码封装性更强 2 说明 分数也称作有理数 是我们