/ / Преминаване на булева операция към функция - java, булева експресия

Преминаване на булевата операция към функция - java, булево изразяване

Добър вечер момчета, точно както казва titel, моето намерение е да премина логическа операция като !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); } Искам да тествам това чрез система навън. Проблемът ми сега е как да предам булев масив в ламбда израза. Направих го:

System.out.println(recursivAequi(new boolean[2],1,boolarray->boolarray[0]&&boolarray[1],boolarray->boolarray[1]&&boolarray[0]);

Така че първият масив е просто заместител, в койтоще бъдат въведени истинските и фалшиви стойности на рекурсивната ми функция. Идентификаторът е необходим, за да има прекъсване в рамките на рекурсивната функция и двете следващи ламбда са двата булеви израза, които искам да тествам.

Дано това помогна малко за разбирането на проблема.

Отговори:

1 за отговор № 1

За да постигнете това, можете да създадете интерфейс за обектите на Boolean Operation и винаги, когато искате да добавите такъв, използвайте Изрази на ламбда.

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; } };