- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须编写一个程序,将用中缀表示法编写的表达式更改为后缀表示法。当我开始使用括号时遇到问题。例如,当我输入“a + (c - h)/(b * d)”时,它会显示为“ac+h-b/d*”,而它应该显示为“a ch - b d */+”。非常感谢您的帮助。谢谢。
import java.util.Scanner;
import java.util.Stack;
public class PostfixConverter {
static private String expression;
private Stack<Character> stack = new Stack<Character>();
public PostfixConverter(String infixExpression) {
expression = infixExpression;
}
public String infixToPostfix() {
String postfixString = "";
for (int index = 0; index < expression.length(); ++index) {
char value = expression.charAt(index);
if (value == '(') {
} else if (value == ')') {
Character oper = stack.peek();
while (!(oper.equals('(')) && !(stack.isEmpty())) {
stack.pop();
postfixString += oper.charValue();
}
} else if (value == '+' || value == '-') {
if (stack.isEmpty()) {
stack.push(value);
} else {
Character oper = stack.peek();
while (!(stack.isEmpty() || oper.equals(('(')) || oper.equals((')')))) {
stack.pop();
postfixString += oper.charValue();
}
stack.push(value);
}
} else if (value == '*' || value == '/') {
if (stack.isEmpty()) {
stack.push(value);
} else {
Character oper = stack.peek();
while (!oper.equals(('+')) && !oper.equals(('-')) && !stack.isEmpty()) {
stack.pop();
postfixString += oper.charValue();
}
stack.push(value);
}
} else {
postfixString += value;
}
}
while (!stack.isEmpty()) {
Character oper = stack.peek();
if (!oper.equals(('('))) {
stack.pop();
postfixString += oper.charValue();
}
}
return postfixString;
}
public static void main(String[] args) {
System.out.println("Type an expression written in Infix notation: ");
Scanner input = new Scanner(System.in);
String expression = input.next();
PostfixConverter convert = new PostfixConverter(expression);
System.out.println("This expression writtien in Postfix notation is: \n" + convert.infixToPostfix());
}
}
最佳答案
您提供的代码类似于 this
。但该代码也不起作用。
我已更新您的代码并添加了更改的注释
。
import java.util.Scanner;
import java.util.Stack;
public class PostfixConverter {
static private String expression;
private Stack<Character> stack = new Stack<Character>();
public PostfixConverter(String infixExpression) {
expression = infixExpression;
}
public String infixToPostfix() {
String postfixString = "";
for (int index = 0; index < expression.length(); ++index) {
char value = expression.charAt(index);
if (value == '(') {
stack.push('('); // Code Added
} else if (value == ')') {
Character oper = stack.peek();
while (!(oper.equals('(')) && !(stack.isEmpty())) {
stack.pop();
postfixString += oper.charValue();
if (!stack.isEmpty()) // Code Added
oper = stack.peek(); // Code Added
}
stack.pop(); // Code Added
} else if (value == '+' || value == '-') {
if (stack.isEmpty()) {
stack.push(value);
} else {
Character oper = stack.peek();
while (!(stack.isEmpty() || oper.equals(('(')) || oper.equals((')')))) {
oper = stack.pop(); // Code Updated
postfixString += oper.charValue();
}
stack.push(value);
}
} else if (value == '*' || value == '/') {
if (stack.isEmpty()) {
stack.push(value);
} else {
Character oper = stack.peek();
// while condition updated
while (!oper.equals(('(')) && !oper.equals(('+')) && !oper.equals(('-')) && !stack.isEmpty()) {
oper = stack.pop(); // Code Updated
postfixString += oper.charValue();
}
stack.push(value);
}
} else {
postfixString += value;
}
}
while (!stack.isEmpty()) {
Character oper = stack.peek();
if (!oper.equals(('('))) {
stack.pop();
postfixString += oper.charValue();
}
}
return postfixString;
}
public static void main(String[] args) {
System.out.println("Type an expression written in Infix notation: ");
Scanner input = new Scanner(System.in);
String expression = input.next();
PostfixConverter convert = new PostfixConverter(expression);
System.out.println("This expression writtien in Postfix notation is: \n" + convert.infixToPostfix());
}
}
关于java - 使用堆栈将 Infix 转换为 Postfix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28576199/
关闭。这个问题是 off-topic 。它目前不接受答案。 想改进这个问题? Update the question 所以它是 Stack Overflow 的 on-topic。 9年前关闭。 Im
我使用 postfix 作为“myDomain.com”的邮件服务器。此外,我已经为 gmail 安装了转发服务。到目前为止效果很好。但是当有人向我发送电子邮件时,例如一个可执行文件,gmail 会退
我已经回答了我自己的问题,稍后可能会更新这个问题以反射(reflect)我的出发点/我为获得解决方案所采取的步骤,但我想我会问一个我开始的问题和采取的结果我花费了不合理的大量时间进行研究,反复试验。请
是否有可能在 /etc/postfix/recipient_bcc_maps 中有多个收件人? ? /etc/postfix/recipient_bcc_maps : source@domain.tl
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve th
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
似乎我的全能别名不起作用。 当我使用 postmap -q test@example.org mysql:/etc/postfix/mysql-virtual-alias-maps.cf 没有输出。
我正在编写一个程序,它读取 Infix 表示法,将其转换为 Postfix,然后评估该 Postfix。这是我的程序: #include #include #define SIZE 50
大家好!我是 C++ 的新手(这里也是 stackoverflow 的新手),我需要各位专家的帮助。 我这里有一个代码,它应该向用户询问中缀表达式,然后将其转换为后缀并输出结果(后缀计算器)。但是,我
我正在尝试让 postfix 将邮件发送到 gmail。我已经按照这篇文章进行了配置,但仍然给我一个错误: relay=smtp.gmail.com[173.194.66.108]:587, dela
我正在使用 postfix v3.3.0 设置新服务器 (Ubuntu 18.04.1 LTS)。 我遵循了 postfix 到只发送设置的标准部署。 http://www.postfix.org/S
我的客户是一家旅行社,有数千封选择加入的电子邮件(没有垃圾邮件)。他们每周向所有客户发送一次消息,但我遇到了一些供应商的问题,我想对所有传出域的整个服务器进行速率限制。 我发现一些配置可以限制每个域每
我一直在尝试设置 postfix,以便它可以向我网站上的用户发送(不需要接收)电子邮件(例如帐户验证电子邮件)。 我通过 mailutils 安装 postfix(安装 postfix 和其他东西)。
突然我打破了我的后缀: 我正在运行,CentOs,Postfix,Dovecot。 我的 Postfix main.cf 文件:http://pastebin.com/STLNRYUK hostnam
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我不确定我这样做是否正确。我正在尝试将中缀方程转换为后缀方程,例如: (3 + 4) * 2 在后缀中是: 4 3 + 2 * 如果可能的话,我试图用一种方法来完成这一切。 现在我收到一个 array
我是一名优秀的程序员,十分优秀!