将布尔运算传递给函数

Passing boolean operation to a function

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

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

 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]);

所以第一个数组只是一个占位符,其中将放入我的递归函数的 true 和 false 值。id 是递归函数中中断所必需的,后面的两个 lambda 是两个布尔值我要测试的表达式。

希望这对理解问题有所帮助。

为此,您可以为布尔运算对象创建一个接口,并且只要您想添加一个接口,就可以使用 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; } };