package org.plkong; import java.util.Stack; public class Calculate { /** * @param args */ public static void main(String[] args) { Calculate calculate = new Calculate(); System.out.println(calculate.calculate("5 1 2+4*+3-")); } public double calculate(String rpn) { Stack<String> calStack = new Stack<String>(); rpn = rpn.replace("+", " + "); rpn = rpn.replace("-", " - "); rpn = rpn.replace("*", " * "); rpn =rpn.replace("/", " / "); rpn =rpn.replace(" ", " "); String[] rpns = rpn.split(" "); for (String rp : rpns) { if (isOperator(rp)) { String cal1 = calStack.pop(); String cal2 = calStack.pop(); calStack.push(calculate(cal2, cal1, rp)); } else { calStack.push(rp); } } return Double.parseDouble(calStack.pop()); } public boolean isOperator(String op) { if (op.equals("+")) return true; if (op.equals("-")) return true; if (op.equals("*")) return true; if (op.equals("/")) return true; return false; } public String calculate(String cal1, String cal2, String op) { double cal_1 = Double.parseDouble(cal1); double cal_2 = Double.parseDouble(cal2); if (op.equals("+")) return String.valueOf(cal_1 + cal_2); if (op.equals("-")) return String.valueOf(cal_1 - cal_2); if (op.equals("*")) return String.valueOf(cal_1 * cal_2); if (op.equals("/")) return String.valueOf(cal_1 / cal_2); return null; } }
相关推荐
通过该实验,我们掌握了逆波兰式的原理和实现方法,并且能够将算术表达式转换为逆波兰式,并计算用逆波兰式表示的算术表达式的值。 逆波兰式的生成步骤包括: 1. 在表达式字符串的末尾加一个代表结束的辅助符,...
逆波兰式,也被称为后缀表达式,是一种用于表示数学表达式的符号表示法。它将操作符放在操作数之后,从而避免了使用括号来指定运算优先级。这种表示法在计算机科学中有着广泛的应用,特别是在编译原理、解析器设计和...
- **java逆波兰式.txt**:这份文件很可能是Java程序的源代码,用于实现逆波兰式表达式的解析和计算功能。通过阅读代码,我们可以学习到如何在Java中利用栈数据结构来处理逆波兰表达式。 - **C逆波兰式.txt**:虽然...
逆波兰表示法(Reverse Polish Notation,RPN),也被称为后缀表示法,是一种没有括号的数学表达式表示方式,它通过将运算符放在操作数之后来简化表达式的计算。 首先,我们需要理解中缀表达式是我们通常在日常生活...
这通常涉及到预处理步骤,包括识别数字、运算符和括号,然后将它们按照逆波兰表示法重新排列。我们可以使用栈来辅助这个过程,当遇到数字时将其压入栈,遇到运算符时弹出栈顶的两个元素进行运算,并将结果重新压回栈...
1. **解析输入**:用户输入的表达式需要转换为逆波兰表示法。这可以通过遍历表达式,遇到数字就压栈,遇到运算符就根据优先级与栈顶元素进行运算。 2. **错误处理**:确保用户输入的表达式合法,防止除零错误、非法...
本实验主要关注的是词法分析和LL(1)解析,以及逆波兰表示法,这些都是编译器设计的基础环节。下面将详细阐述这些概念。 首先,词法分析(Lexical Analysis)是编译器的第一个阶段,也称为扫描器或词法生成器。它的...
这种表示法在计算机科学中尤其有用,因为它简化了表达式的计算过程,特别是通过栈数据结构实现的计算。 在Java编程中,我们可以编写程序来实现中缀表达式到逆波兰式的转换,并使用逆波兰式进行表达式的求值。这个...
布尔翻译逆波兰式是一种在计算机科学中用于表示布尔表达式的计算方法,它是逆波兰表示法(也称为后缀表示法)的一个特例,主要用于布尔代数的运算。在这个实验报告中,我们将深入探讨这一概念,并了解如何将其应用于...
在计算机科学领域,波兰式(也称为前缀表示法)和逆波兰式(也称为后缀表示法)是表达算术或逻辑公式的不同方式。这两种表示法都是为了简化计算过程,尤其是在编译器设计和计算器程序中。本项目提供了一个小程序,...
逆波兰算法,也称为后缀表达式或波兰后缀表示法,是一种数学表达式的表示方法,主要用于简化计算过程,特别是用于计算机程序中的算术运算。它通过将操作符置于其操作数之后,消除了对括号的需求,使得计算更为直观和...
在逆波兰表示法中,计算通常通过栈数据结构来实现,使得计算过程更为直观和高效。 逆波兰式计算的核心思想是将中缀表达式(如我们常见的加减乘除表达式)转换为后缀表达式,然后进行计算。中缀表达式转换成逆波兰式...
逆波兰表达式,又称后缀表达式,是一种用于表示数学计算的符号表示法。它将操作符放在操作数之后,避免了使用括号,简化了运算过程。在基于逆波兰表达式的计算程序中,通常包括以下几个核心知识点: 1. **逆波兰...
逆波兰算法,也称为后缀表达式算法,是计算表达式的一种有效方法,尤其在编程领域,如Android应用开发中的计算器实现中广泛应用。这个算法的主要优点在于它避免了使用堆栈来处理运算符优先级的问题,使得计算过程...
例如,常规的表达式 "2 + 3 * 4" 在逆波兰表示法中会变成 "2 3 4 * +"。计算逆波兰表达式通常采用栈数据结构,遍历表达式,遇到数字就压入栈,遇到运算符则取出栈顶的两个数字进行运算,然后将结果压回栈中,直到...
- **递归下降分析法**:通过构建语法树,自顶向下地对中缀表达式进行分析,转换成逆波兰式。 5. **Java实现**:在Java编程中,我们可以使用数组或ArrayList来存储操作数和运算符,使用Stack类来模拟计算过程。关键...
例如,“3 + 4”在逆波兰表示法中写作“3 4 +”。这种表示法的一个显著优点是不需要使用括号来确定计算顺序,因为运算符的位置已经明确了操作数之间的关系。 #### 三、逆波兰式的生成算法 生成逆波兰式的常用算法是...
这种表示法消除了括号的需要,因为运算的优先级可以通过运算符的位置来确定。例如,在后缀表达式2 3 4 * +中,我们先执行3和4的乘法,然后将结果与2相加。 在Java中实现逆波兰式计算器通常涉及到以下步骤: 1. **...
在这种表示法中,操作符位于其操作数之后,使得表达式无需括号就能明确表示优先级。例如,常规的中缀表达式 "2 + 3 * 4" 在逆波兰式表示下会变成 "2 3 4 * +"。 在给定的“counter”项目中,逆波兰式计算器实现了...
逆波兰算法,也称为后缀表达式或逆波兰表示法,是一种无括号的数学表达式表示方式,它通过将运算符放在操作数之后来消除运算优先级的困扰。这种算法在计算机科学中广泛用于表达式求值,因为它简化了计算过程。在Java...