将布尔运算传递给函数

时间:2017-12-16 23:12:33

标签: java boolean-expression

晚上好, 正如标题所说,我的意图是,传递像!x&&z这样的布尔操作 到一个函数,以便我可以在以后应用此操作。计划是将任何布尔运算转移到真值表中。我需要的只是对不同输入的一些递归,一个字符串分析将String转换为boolean,最后将此布尔操作应用于递归。 除了字符串分析,我只想尝试对递归应用布尔运算。有没有办法轻易做到这一点?

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

 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是必要的,下面两个lambdas是两个布尔表达式我想测试。

希望这有助于理解这个问题。

1 个答案:

答案 0 :(得分: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; } };