将布尔运算传递给函数

问题描述 投票:-3回答:1

晚上好人,正如标题所说,我的目的是,将一个像!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是我想测试的两个布尔表达式。

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

java boolean-expression
1个回答
1
投票

要实现这一点,您可以为Boolean Operation对象创建一个接口,并且只要您想添加一个接口,就可以使用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; } };

© www.soinside.com 2019 - 2024. All rights reserved.