【发布时间】:2021-10-11 20:48:35
【问题描述】:
我正在尝试编写 2 种方法,它们可以仅使用 1 个堆栈和 1 个 switch 语句对一串括号进行排序。我无法让它工作,我想知道是否可能是因为字符串中的 ' ' 的情况?默认情况下不应该选择这些还是我理解 switch 语句错误?这就是我现在的位置。
out.println(checkParentheses("({} [()] ({}))")); // should print true
out.println(!checkParentheses("({} [() ({)})")); // should print false
Boolean checkParentheses(String brackets) {
Deque<Character> stack = new ArrayDeque<>();
for( char ch : brackets.toCharArray()) {
if (stack.peek() == matching(ch)) {
stack.pop();
} else {
stack.add(ch);
}
}
return stack.isEmpty();
}
char matching(char ch) {
// char c = (' ');
switch (ch) {
case ')':
return '('; // c = '('
case ']':
return '[';
case '}':
return '{';
default:
// return c;
throw new IllegalArgumentException("No match found");
}
}
【问题讨论】:
-
您是否尝试过调试或至少运行您的代码?或者你更喜欢 SO 社区为你做这件事?
if (stack.peek() == matching(ch))行立即抛出 NPE,因为您不检查堆栈是否为空;如果找到左括号/括号,方法matching将抛出 IllegalArgumentException。 -
同样
!checkParentheses("({} [() ({)})")不能返回false,因为有逻辑NOT!operator 并且给定输入的结果肯定是false- 字符串显然不平衡,所以这里@应该是 987654328@。 -
对不起,应该提到,但我确实运行和调试,它只是说“未找到变量”。既然你提到了它,很明显它也拒绝左括号。
标签: java switch-statement stack