将布尔运算传递给函数
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;
}
};
大家晚上好,
正如标题所说,我的意图是传递一个布尔运算,如 !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;
}
};