Java'.class'预期错误

时间:2013-11-26 18:15:43

标签: java variables loops scope global-variables

下面的代码会出现编译错误:“。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();
    }
}

3 个答案:

答案 0 :(得分:1)

您在if条件中使用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.
        }

答案 1 :(得分:1)

如果你的代码会编译

if (!stack.isEmpty())
    char pop = stack.pop();
else

与(表示变量范围的通知{...}括号)相同

if (!stack.isEmpty()){
    char pop = stack.pop();
} else

因此,这意味着您只是获得stack.pop()的结果并将其存储在变量char pop中,而该变量if无法在此块之外的任何位置访问。
由于该指令是唯一一个在pop()条件成功的情况下执行的指令,这意味着char pop的存储结果是冗余的并且是设计问题的标志。

要解决此问题,请在if语句之前的某处声明if,以便在char pop; //make sure that this variable will be initialized before you use it if (!stack.isEmpty()) pop = stack.pop(); else 阻止之后访问它。

{{1}}

答案 2 :(得分:0)

问题可能存在于以下代码中:

if(!stack.isEmpty())         // here you will need to provide curly braces to define pop's scope
     char pop=stack.pop();

另外,如果您在外面声明pop,我会在您的注释代码//char pop中看到它,如果条件在您尝试时更有意义,则必须删除上面的pop声明在if条件之外使用它。