gpt4 book ai didi

java - 无法检查字符串是否平衡

转载 作者:行者123 更新时间:2023-11-30 08:45:16 25 4
gpt4 key购买 nike

package edu.bsu.cs121.mamurphy;

import java.util.Stack;

public class Checker {

char openPara = '(';
char openBracket = '[';
char openCurly = '{';
char openArrow = '<';
char closePara = ')';
char closeBracket = ']';
char closeCurly = '}';
char closeArrow = '>';

public boolean checkString(String stringToCheck) {
Stack<Character> stack = new Stack<Character>();

for (int i = 0; i < stringToCheck.length(); i++) {
char c = stringToCheck.charAt(i);
if (c == openPara || c == openBracket || c == openCurly || c == openArrow) {
stack.push(c);
System.out.println(stack);
;
}
if (c == closePara) {
if (stack.isEmpty()) {
System.out.println("Unbalanced");
break;
} else if (stack.peek() == openPara) {
stack.pop();
} else if (stack.size() > 0) {
System.out.println("Unbalanced");
break;
}
}
if (c == closeBracket) {
if (stack.isEmpty()) {
System.out.println("Unbalanced");
break;
} else if (stack.peek() == openBracket) {
stack.pop();
} else if (stack.size() > 0) {
System.out.println("Unbalanced");
break;
}

}
if (c == closeCurly) {
if (stack.isEmpty()) {
System.out.println("Unbalanced");
break;
} else if (stack.peek() == openCurly) {
stack.pop();
} else if (stack.size() > 0) {
System.out.println("Unbalanced");
break;
}
}
if (c == closeArrow) {
if (stack.isEmpty()) {
System.out.println("Unbalanced");
break;
} else if (stack.peek() == openArrow) {
stack.pop();
} else if (stack.size() > 0) {
System.out.println("Unbalanced");
break;
}
}
}
return false;
}

}

我目前正在尝试创建一个程序来检查字符串是否平衡。当且仅当每个开始字符:(、{、[ 和 < 分别具有匹配的结束字符:)、}、] 和 > 时,字符串才是平衡的。

检查字符串时,如果找到开始字符,就会将其压入堆栈,然后检查是否有合适的结束字符。

如果在开始字符之前有一个结束字符,那么这自动意味着该字符串是不平衡的。此外,如果在转到下一个字符后堆栈中仍有内容,则字符串会自动失衡。

我试过

else if (stack.size() > 0) {
System.out.println("Unbalanced");
break;
}

作为查看堆栈中是否还有任何东西的一种方式,但它仍然对我不起作用。有什么建议可以做什么?

例如,如果字符串输入是 ()<>{()然后程序应该像往常一样运行直到它到达单个 {然后代码应该意识到字符串不平衡并输出 Unbalanced .

无论出于何种原因,我的代码都没有这样做。

最佳答案

以下逻辑是有缺陷的(强调我的):

For example, if the string input were ()<>{() then the program should run through like normal until it gets to the single { and then the code should realize that the string is unbalanced and output Unbalanced.

事实上,在扫描整个字符串 并确定{ 之前,代码无法得出字符串不平衡的结论。没有匹配 } .就其所知,完整的输入可能是 ()<>{()}并保持平衡。

为此,您需要添加一个检查以确保在处理完整个字符串后堆栈为空。在您的示例中,它仍将包含 { ,说明输入不平衡。

关于java - 无法检查字符串是否平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33378870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com