java - 使用堆栈的中缀到后缀 - Java
问题描述
我正在尝试学习和实现堆栈的一些实际用途,并且我正在做一个小程序,它接受一个方程并将其转换为后缀符号。我知道后缀表示法、堆栈和优先级是如何工作的,所以我采用的语法方法对我来说似乎很有意义,但是它似乎以某种前缀表示法打印出来,有时会有一些重复,这真的很奇怪。任何帮助将不胜感激,我将在下面为你们留下所有代码,谢谢。
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
infixToPostfix();
}
private static int Precedence(char character) {
System.out.print("" + character);
switch (character) {
case '+':
case '-':
return 1;
case '/':
case '*':
return 2;
case '^':
return 3;
}
return -1;
}
private static String infixToPostfix() {
Scanner scanner = new Scanner(System.in);
Stack<Character> operatorStack = new Stack<>();
System.out.println("please enter your equation");
String equation = scanner.nextLine();
StringBuilder result = new StringBuilder();
for (int i = 0; i < equation.length(); i++) {
char ch = equation.charAt(i);
if (Character.isDigit(ch)) {
result.append(ch);
} else if (ch == '(') {
operatorStack.push(ch);
} else if (operatorStack.isEmpty()
&& !Character.isDigit(ch)) {
operatorStack.push(ch);
} else {
while (!operatorStack.isEmpty()) {
if (!Character.isDigit(ch)
&& Precedence(
ch) < operatorStack
.peek()) {
result.append(operatorStack.pop());
} else if (!Character.isDigit(ch)
&& Precedence(
ch) > operatorStack
.peek()) {
operatorStack.push(ch);
} else if (ch == ')') {
result.append(operatorStack.pop());
}
}
}
}
System.out.println(result);
return result.toString();
}
}
2*(3+1) // input
++23(*1 // output
31+2* // expected output
Process finished with exit code 0
解决方案
推荐阅读
- php - 如何将增量运算符连接到 PHP
- c# - 出了点问题“错误 CS1513:} 预期”
- java - 如何计算所有用户输入数据的费用?
- mysql - MySQL reset id custom id based on current year
- python - 修改数据框图上的 x 轴值
- powershell - 如何将Windows窗体文本框输入传递给powershell模块功能
- c# - 如何有条件地将多个模型映射到 ASP.NET Core Identity 中的一个表(AspNetUsers)?
- excel - 如何在 Excel VBA 中显示警报消息?
- sql - 在 SQL Server 中联合所有的替代方案
- python - 使用 pandas 将 Mongodb 文档导出到 excel 或 csv