设计一个Java程序,完成: 表达式整理,去掉多余的括号。假设输入的表达式是正确的(不用检验是否正确),且只是由+和*两种运算组成。 如:"(((2))*(((4+1))))+2",去掉多余括号后,结果是:"2*(4+1)+2" 输入界面: 请输入表达式:(((2))*(((4+1))))+2 输出界面: 去掉多余括号后,结果是:2*(4+1)+2
时间: 2023-12-08 08:04:01 浏览: 40
好的,以下是 Java 代码实现:
```java
import java.util.Scanner;
public class ExpressionSimplification {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入表达式:");
String exp = sc.nextLine();
String result = simplify(exp);
System.out.println("去掉多余括号后,结果是:" + result);
}
// 表达式整理,去掉多余的括号
public static String simplify(String exp) {
StringBuilder sb = new StringBuilder(exp);
int len = sb.length();
boolean[] remove = new boolean[len]; // 标记哪些括号可以删除
for (int i = 0; i < len; i++) {
char c = sb.charAt(i);
if (c == '(') {
// 如果左括号后面一个字符是右括号或者数字,则说明括号可以删除
if (i + 1 < len && (sb.charAt(i + 1) == ')' || Character.isDigit(sb.charAt(i + 1)))) {
remove[i] = true;
remove[findMatchingRightParenthesis(sb, i)] = true; // 标记右括号也要删除
}
}
}
// 删除标记的括号
for (int i = len - 1; i >= 0; i--) {
if (remove[i]) {
sb.deleteCharAt(i);
}
}
// 去掉括号后,将"(a+b)*c"这种形式变成"a+b*c"
for (int i = 0; i < sb.length() - 1; i++) {
char c1 = sb.charAt(i);
char c2 = sb.charAt(i + 1);
if (c1 == ')' && c2 == '(') {
sb.insert(i + 1, '*');
}
}
return sb.toString();
}
// 找到与指定左括号匹配的右括号的下标
public static int findMatchingRightParenthesis(StringBuilder sb, int leftParenthesisIndex) {
int count = 1;
for (int i = leftParenthesisIndex + 1; i < sb.length(); i++) {
char c = sb.charAt(i);
if (c == '(') {
count++;
} else if (c == ')') {
count--;
}
if (count == 0) {
return i;
}
}
return -1; // 没有匹配的右括号
}
}
```
代码思路如下:
1. 遍历整个表达式,如果发现左括号后面一个字符是右括号或者数字,则说明这对括号可以删除,标记一下。
2. 根据标记删除对应的括号。
3. 去掉括号后,将"(a+b)*c"这种形式变成"a+b*c"。
4. 返回整理后的表达式。
注意事项:
1. 由于只考虑了+和*两种运算,所以输入的表达式必须是正确的,不用检验是否正确。
2. 如果输入的表达式中有空格,需要先把空格去掉。
相关推荐
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)