某语言中允许关系算符连用,即存在形如"3<4>2"的关系运算表达式,在Java中应写成“3<4&&4>2”才是合法的表达式。 现要在Java中对输入的连用关系算符的表达式进行计算,如何实现呢?
时间: 2023-06-24 14:07:59 浏览: 65
基于Java实现关系和相关运算【100011436】
可以通过使用逆波兰表达式来实现对输入表达式的计算。具体步骤如下:
1. 将中缀表达式转换为后缀表达式,也就是逆波兰表达式。具体转换方法为使用栈来保存操作符,遇到数字直接输出,遇到操作符则与栈顶操作符比较优先级,若当前操作符优先级大于栈顶操作符,则直接入栈,否则将栈顶操作符弹出并输出,直到当前操作符优先级大于栈顶操作符或栈为空,最后将当前操作符入栈。
2. 对逆波兰表达式进行求值。具体求值方法为使用栈来保存数字,遇到数字直接入栈,遇到操作符则从栈中弹出两个数字,进行相应的计算,并将计算结果压入栈中。
下面是一个简单的Java代码实现:
```java
import java.util.*;
public class Calculator {
public static int calculate(String expression) {
String[] tokens = expression.split(" ");
Stack<Integer> stack = new Stack<>();
for (String token : tokens) {
if (isOperator(token)) {
int b = stack.pop();
int a = stack.pop();
int result = calculate(a, b, token);
stack.push(result);
} else {
stack.push(Integer.parseInt(token));
}
}
return stack.pop();
}
private static boolean isOperator(String token) {
return token.equals("<") || token.equals(">") || token.equals("&&");
}
private static int calculate(int a, int b, String operator) {
switch (operator) {
case "<":
return a < b ? 1 : 0;
case ">":
return a > b ? 1 : 0;
case "&&":
return a == 1 && b == 1 ? 1 : 0;
default:
throw new IllegalArgumentException("Invalid operator: " + operator);
}
}
public static void main(String[] args) {
String expression = "3 < 4 && 4 > 2";
String[] tokens = expression.split(" ");
StringBuilder sb = new StringBuilder();
for (String token : tokens) {
if (isOperator(token)) {
sb.append(token).append(" ");
} else {
sb.append(Integer.parseInt(token)).append(" ");
}
}
int result = calculate(sb.toString().trim());
System.out.println(result);
}
}
```
输出结果为`1`,表示表达式计算结果为`true`。
阅读全文