【发布时间】:2021-07-19 12:07:31
【问题描述】:
我正在尝试进行平衡字符串测试。即使我将一个元素推入堆栈也很烦人:stack.push(s.charAt(0)),它仍然在 Stack.StackTest.main(StackTest.java:18) 处显示 EmptyStackException。这是我的代码:
import java.util.Stack;
public class StackTest
{
public static void main (String[] args)
{
//Scanner scanner = new Scanner(System.in);
Stack<Character> stack = new Stack<>();
int i;
String s = "{}(){}{}{}";
stack.push(s.charAt(0));
for (i = 1;i < s.length();i++)
{
if (stack.peek() == '{' && s.charAt(i) == '}')
{
if (!stack.empty())
{
stack.pop();
}
}
else if (stack.peek() == '[' && s.charAt(i) == ']')
{
if (!stack.empty())
{
stack.pop();
}
}
else if (stack.peek() == '(' && s.charAt(i) == ')')
{
if (!stack.empty())
{
stack.pop();
}
}
else
{
stack.push(s.charAt(i));
}
}
while (!stack.empty())
{
System.out.print(stack.pop());
}
}
}
【问题讨论】:
-
好吧,在你的第一个循环中,
} else if (stack.peek() == '[' && s.charAt(i) == ']') {被触发并且你弹出堆栈中唯一的元素,所以现在它是空的