字符串的布尔值判断

美团点评2020校招后台开发方向笔试题

给出一个布尔表达式的字符串,比如:true or false and false,表达式只包含true,false,and和or,现在要对这个表达式进行布尔求值,计算结果为真时输出true、为假时输出false,不合法的表达时输出error(比如:true true)。表达式求值是注意and 的优先级比 or 要高,比如:true or false and false,等价于 true or (false and false),计算结果是 true。
一开始考虑了一堆and or的情况,后来看到评论区大家的回答,顿然醒悟,这道题居然是用来解答。遇到and的就出栈计算值然后再进栈,最后栈内的元素只剩下true false or,然后再判断如果没有格式错误,存在true结果就为true。为了表达方便,我用list来实现类似栈的功能。

public static void main(String[]args){
  Scanner in=new Scanner(System.in);
        String ss=in.nextLine();
        String []s=ss.split(" ");
        List<String>list=new LinkedList<>();
        int i=0,flag=0;
        boolean res=true;
        if(s.length==1)
        {
            if(s[0].equals("or")||s[0].equals("and"))
                System.out.println("error");
            else System.out.println(s[0]);
        }
        else{while(i<s.length)
        {
            if(!s[i].equals("and"))
                list.add(s[i]);
            else {
                String temp=list.get(list.size()-1);
                list.remove(list.size()-1);
                i++;
                if(temp.equals("false")||s[i].equals("false"))
                    list.add("false");
                else if(temp.equals("true")&&s[i].equals("true"))
                    list.add("true");
                else {flag=1;break;}
            }
            i++;
        }
        if(flag==1||s.length%2==0)
            System.out.println("error");
        else{
            int len=list.size();
            for(int k=0;k<len;k++)
                if(k%2==0)
                {
                    if(list.get(k).equals("or"))
                    {flag=1;break;}
                    else if(list.get(k).equals("true"))
                    flag=2;
                }
            else {
                if(!list.get(k).equals("or"))
                    {flag=1;break;}
            }
            if(flag==1)
                System.out.println("error");
            else if(flag==2)
                System.out.println("true");
            else System.out.println("false");
        }
     }
 }
发布了45 篇原创文章 · 获赞 4 · 访问量 1030

猜你喜欢

转载自blog.csdn.net/weixin_43838915/article/details/105400847
今日推荐