Java 为什么即使我将一个元素推入堆栈,它仍然是空的
我想做一个平衡字符串测试。非常恼人的是,即使我将一个元素推入堆栈:stack.push(s.charAt(0)),它仍然在stack.StackTest.main(StackTest.java:18)处显示EmptyStackException。这是我的密码:Java 为什么即使我将一个元素推入堆栈,它仍然是空的,java,stack,Java,Stack,我想做一个平衡字符串测试。非常恼人的是,即使我将一个元素推入堆栈: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 s
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());
}
}
}
import java.util.Stack;
公共类堆栈测试
{
公共静态void main(字符串[]args)
{
//扫描仪=新的扫描仪(System.in);
堆栈=新堆栈();
int i;
字符串s=“{}(){}{}{}”;
堆栈推送(s.charAt(0));
对于(i=1;i
在循环的第一次迭代中,堆栈不是空的,但第一次迭代将从堆栈中弹出唯一的元素。然后,在下一次迭代中调用stack.peek()
,就会得到EmptyStackException
你应该把!stack.empty()
在stack.peek()
语句之前的条件,以避免出现EmptyStackException
例如,改变
if (stack.peek() == '{' && s.charAt(i) == '}')
{
if (!stack.empty())
{
stack.pop();
}
}
到
您应该以同样的方式更改其他条件。好吧,在第一个循环中,
}else如果(stack.peek()='['&&s.charAt(i)=']']){
被触发,您弹出堆栈中的唯一元素,那么现在它是空的
if (!stack.isEmpty() && stack.peek() == '{' && s.charAt(i) == '}')
{
stack.pop();
}