转载csdn 笔试题-布尔表达式求值表达式只包含truefalseand和or现在要对这个表达式进行布尔求值计算结果为真时输出true、为假时输出false java实现 来自
package top.starp.newCoder.meiTuan.t1;import top.starp.util.ArrayUtil;import java.util.Scanner;import java.util.Stack;//https://blog.csdn.net/zy854816286/article/details/105174896public class solution{// void prin// ListUstatic boolean contains(int [] arr,int val){for (int i : arr) {if(ival){return true;}}return false;}static void printArrMark(String[] strings,int [] markIdxs){int idx0;for (String string : strings) {if(contains(markIdxs,idx)){System.out.print(String.format("(%s) ",string ));}else{System.out.print(string " ");}idx;}System.out.println();}public static void main(String[] args){Scanner scannew Scanner(System.in);String sscan.nextLine();scan.close();String[] strs.split(" ");if(str[str.length-1].equals("and")||str[str.length-1].equals("or")||str[0].equals("and")||str[0].equals("or")){System.out.println("error");return;}if(str.length%20){System.out.println("error");return;}Stack stacknew Stack();for(int istr.length-1;i>0;i--){if(i%20return;}else if(i%21return;}else{System.out.println("");String tempstr[i];printArrMark(str,new int[]{i});// ArrayUtil.if(temp.equals("and")){// 之前的 是从尾部开始的tempstack.pop();//只有都是false 才会是falseif(temp.equals("false")||str[i-1].equals("false")){temp"false";//这是什么判断// str[i-1] 是栈里的东西吗 但是栈是会push的 所以不是}else{temp"true";}//打印栈 java// 处理完后面的 false and false 就会变成 falseSystem.out.println("stack 一开始");System.out.println(stack);stack.push(temp);System.out.println("stack 放入了");System.out.println(stack);i--;//-- 是干嘛}else{stack.push(temp);}}System.out.println(stack);}//or 没有处理 只要有一个true 就是truewhile(!stack.isEmpty()){if(stack.pop().equals("true")){System.out.println("true");return;}}System.out.println("false");return;}}
输入 true or false and false
输出 true or false and (false) [false] true or false (and) false stack 一开始 [] stack 放入了 [false] [false] true (or) false and false [false, or] (true) or false and false [false, or, true] true
【文章出处:香港站群服务器 http://www.558idc.com/hkzq.html 复制请保留原URL】