【发布时间】:2021-05-06 06:30:51
【问题描述】:
我有这段代码,它检查像“{{}[]}”这样的字符串中的括号是否处于有效顺序:
import java.util.*;
public class BraceChecker {
private static HashMap<String,String> dict=new HashMap<>(){{
put(")","(");
put("]","[");
put("}","{");
}};
public boolean isValid(String braces) {
Stack<String> stack=new Stack<>();
for(String s:braces.split("")){
if(dict.get(s)==null){
stack.push(s);
System.out.println("test");
}
else
try{
if(!stack.pop().equals(dict.get(s))){
System.out.println("what");
return false;
}
}catch(EmptyStackException e){return false;}
}
return true;
}
}
对于字符串中的每个字符,如果是左括号,则将其添加到堆栈中,如果是右括号,则删除一项。如果删除的项目与输入字符串中的括号不匹配,它应该返回 false。
但是当程序在应该返回false的字符串“[(])”上运行时,它返回true。 System.out.printlns 产生这个:
test
test
what
test
what
test
what
test
test
test
test
test
test
test
但是为什么程序到达第一个'what'时不返回false?我怎样才能让它返回 false?
【问题讨论】:
标签: java return control-flow