Java 四则运算

Java 四则运算

Github地址

数据结构

使用二叉树存放四则运算式,比如1+2×3÷(4-5)+6这个表达式就可以使用以下二叉树表示,中序遍历二叉树时就可以还原四则运算。

java 四则运算 类 java的四则运算_四则运算

作业要求四则运算式中不能出现负数,(4-5)在二叉树中调换位置即可。

java 四则运算 类 java的四则运算_java笔试中的四则运算_02

2.2 实现步骤

java 四则运算 类 java的四则运算_java 四则运算 类_03

java 四则运算 类 java的四则运算_java_04

在主函数main()中输入-n,-r两个参数, 传入并执行generateMap()函数,在generateMap() 中用for循环new ArithmeticTree对象,在ArithmeticTree的构造器中,计算了四则运算结果,返回一个OperatorNode结点,在generateMap()函数调用ArithmeticTree对象中的值,包括计算出的结果,调用hashMap.put()保存在HashMap对象中,再传入writFile()写出文件。

类功能Main主函数,获取输入值,计算结果

ArithmeticTree构建四则运算的二叉树
FractionOperation分数的四则运算操作
DataNode存放数据的结点
OperatorNode存放操作符的结点
FileUtilsIO流操作,文件输入输出
GenerateUtils随机生成四则运算
/**
* 获取随机范围内的随机整数
* @param range 范围
* @return 随机数
*/
public static int getRandomInRange(int range) {
ThreadLocalRandom random = ThreadLocalRandom.current();
return random.nextInt(range);
}
/**
* 构建生成四则运算表达式的二叉树
* @param number 运算符数量
* @return 二叉树头节点
*/
public DataNode generateNode(int number) {
//如果是0就构造叶子节点
if (number == 0) {
return new DataNode(FractionOperation.generateFraction(), null, null, 1);
}
//其他都是构造符号节点
OperatorNode rootNode = new OperatorNode(null, null, OPERATORS[GenerateUtils.getRandomInRange(4)]);
int leftNum = GenerateUtils.getRandomInRange(number);
//递归下去构造左孩子和右孩子
rootNode.left = generateNode(leftNum);
//总数要减去当前已经构建出来的这一个节点
rootNode.right = generateNode(number - 1 - leftNum);
//计算结果
FractionOperation result = calculate(rootNode.operator, rootNode.left.result, rootNode.right.result);
//如果是负数,交换左右孩子
if (result.isNegative()) {
DataNode tmp = rootNode.left;
rootNode.left = rootNode.right;
rootNode.right = tmp;
}
rootNode.result = result;
rootNode.high = Math.max(rootNode.left.high, rootNode.right.high) + 1;
return rootNode;
}

java 四则运算 类 java的四则运算_四则运算_05

java 四则运算 类 java的四则运算_四则运算_06

java 四则运算 类 java的四则运算_java笔试中的四则运算_07

java 四则运算 类 java的四则运算_四则运算_08

Java 四则运算相关教程

首次java项目出现的问题(全部写在一起)

首次java项目出现的问题(全部写在一起) aop依赖异常 javax.servlet.ServletException:Servlet.init() for servlet despatcherServlet threw exception java.lang.NoSuchMethodError: org.springframework.aop.framework.AopProxyUtils.getSingletonTarget(L

JavaScript反混淆通用插件一:处理十六进制、Unicode字符串或数值

JavaScript反混淆通用插件一:处理十六进制、Unicode字符串或数值 插件功能 处理人难以阅读的字符串或者数值。简单来说就是将不直观的字符串或者数值变的直观。 处理实例 处理前: var a = 0x25,b = 0b10001001,c = 0o123456,d = \x68\x65\x6c\x6c\x6f\x2c\x41\

Java多线程之浅谈死锁问题

Java多线程之浅谈死锁问题 死锁是java多线程中的一个重要内容,对于死锁的理解相当重要。 什么是死锁: 板正的官方定义为: 当多个线程分别占用其他线程所需要的同步资源,都在等待其他线程释放自己所需要的同步资源时,就形成了死锁。 这样的例子我们并不太好

JavaScrip原型、原型链

JavaScrip原型、原型链 1. 认识一下原型 let Son = { name: son } console.dir(son); // 输出为 object{ name: son __proto__: Object } 很明显, Son 这个对象不光有自己的属性,还有 __proto__ 的属性,那么 __proto__ 就可以理解为Son的原型,当我们点开 __

【工作笔记】java.lang.ArrayStoreException: sun.reflect.annot

【工作笔记】java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy 起因 项目启动时提示如下错误,从提示信息是没看出来什么原因 java.lang.IllegalStateException: Cannot load configuration class: xxxxxxat org.springfr

2018省赛JavaA组---复数幂(填空)

2018省赛JavaA组---复数幂(填空) import java.io.File;import java.io.FileNotFoundException;import java.io.PrintStream;import java.math.BigInteger;import java.util.Calendar;public class TestOne {public static void main(String[] args) {/* * *

java笔记

java笔记 java笔记 JVM,JRE与JDK java语言有一个非常显著的特征就是跨平台性,无论在什么操作系统上,java程序都能够运行,这就得益于java的JVM。 JVM ?java虚拟机,简称JVM(java virtual machine),是运行java程序的假想计算机,是java程序的运行环境,我们

《JavaOOP》第四篇--多态

《JavaOOP》第四篇--多态 JavaOOP之多态 目录 JavaOOP之多态 什么是多态 子类到父类的转换 父类到子类的转换 instanceof运算符 设计模式 单例模式 懒汉模式和饿汉模式的特点及代码实现 接口的基础知识 成员内部类、静态内部类、方法内部类 什么是多态 多态(P