有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将布尔运算传递给函数

各位晚上好, 正如titel所说,我的意图是传递一个布尔运算,如!x&&z 到函数,以便稍后应用此操作。计划是将任何布尔运算转换为真值表。我所需要的只是对不同的输入进行一点递归,通过字符串分析将字符串转换为布尔值,最后将此布尔操作应用于递归。 除了字符串分析之外,我只想尝试对递归应用布尔运算。有什么方法可以轻松做到这一点吗

根据需要,我将包括一些代码:

 private static String recursivAequi(boolean[] bools,int id,BoolOp op,BoolOp op2)
{
    String values[]=new String[]{"true","false"};
    for(String i:values)
    {
        bools[bools.length-id-1]=Boolean.valueOf(i);
        if(id!=0)
        {
            return recursivAequi(bools,id-1,op,op2);
        }
        else
        {
            boolean one=op.TruthValue(bools);
            boolean two =op2.TruthValue(bools);
            if(one^two)
            {
                return false+"";
            }
        }
    }
    return true+"";
}

因此,该方法将检查两个布尔运算是否等价,方法是为布尔表达式的每个变量插入true和false。 我的界面BoolOP现在看起来像这样: public interface BoolOp { public boolean TruthValue(boolean[] bools); } 我想通过一个系统进行测试。我现在的问题是,如何将布尔数组传递到lambda表达式中。 我这样做:

System.out.println(recursivAequi(new boolean[2],1,boolarray->boolarray[0]&&boolarray[1],boolarray->boolarray[1]&&boolarray[0]);

因此,第一个数组只是一个占位符,其中将放入递归函数的真值和假值。id对于递归函数中的中断是必需的,下面的两个lambda是我要测试的两个布尔表达式

希望这有助于理解问题


共 (1) 个答案

  1. # 1 楼答案

    为了实现这一点,您可以为布尔运算对象创建一个接口,并且无论何时您想要添加一个接口,都可以利用Lambda Expressions

    public interface BoolOp {
        public boolean TruthValue(boolean x, boolean z);
    }
    ...
    public void performBoolOp (BoolOp op) {
        op.TruthValue(true, true);
    }
    ...
    performBoolOp((x, z) -> !x^z);
    

    当您将对象的引用作为BoolOp接口的实例传递时,它必须已经实现了TruthValue函数,因此您可以这样调用它

    注意:

    (x, z) -> !x^z本质上是相同的,只是更简洁,如下所示:

    new BoolOp() { @Override public boolean TruthValue(boolean x, boolean y) { return !x^z; } };