下面的代码将出现编译错误:预期为“.class”:
Stack<Character> stack=new Stack<Character>();
char pop=stack.pop();
但是如果我改成这个,编译成功:
char pop;
Stack<Character> stack=new Stack<Character>();
pop=stack.pop();
原因是什么?
完整代码在这里:
public class Solution {
public boolean isValid(String s) {
//char pop;
if(s==null||s.length()==0)return true;
Stack<Character> stack=new Stack<Character>();
stack.push(s.charAt(0));
for(int i=1;i<s.length();i++){
char c=s.charAt(i);
if(c=='('||c=='['||c=='{')
stack.push(c);
else{
if(!stack.isEmpty())
char pop=stack.pop();
else
return false;
if(c==')'&&pop!='(') return false;
else if(c==']'&&pop!='[') return false;
else if(c=='}'&&pop!='{') return false;
}
}
return stack.isEmpty();
}
}
最佳答案
您在 if 条件中使用了 pop 作为局部变量。它应该是全局的,因为您稍后将使用 pop 值。
尽管在其他情况下将不会使用 pop。但还是会显示编译错误。
在您的代码片段中:
else{
if(!stack.isEmpty())
char pop=stack.pop(); // Here you initialized the value inside a condition.
else
return false;
if(c==')'&&pop!='(') return false;
else if(c==']'&&pop!='[') return false;// Using the value.
else if(c=='}'&&pop!='{') return false;// Using the value.
}
关于Java '.class' 预期错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20224827/