晚上好,
正如标题所说,我的意图是,传递像!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是两个布尔表达式我想测试。
希望这有助于理解这个问题。
答案 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;
}
};