У меня есть небольшой код, для которого я пытаюсь вычислить лог c. В этом фрагменте кода у меня есть три логических значения:
hasAccount
isInactive
trackInactive
В этой ситуации я хочу что-то сделать, только если:
У пользователя есть учетная запись ИЛИ у пользователя есть учетная запись, их учетная запись активен, или их учетная запись не активна, и я не отслеживаю неактивные учетные записи.
Первоначально я думал, что это будет так:
if(hasAccount ^ (hasAccount && (!isInactive || !trackInactive))){
// Do something here ...
}
Я попытался написать немного кода чтобы проверить все входные данные, чтобы увидеть, какое условие даст мне правильный результат. Вот что у меня есть:
import java.util.Locale;
public class BoolTest {
public static void main(String[] args){
boolean[] boolArray = {false,true};
// WHERE:
// A -or- i = hasAccount
// B -or- j = isInactive
// C -or- k = trackInactive
System.out.println("+---+---+---++---+");
System.out.println("| A | B | C || X |");
System.out.println("+---+---+---++---+");
for(int i=0; i<boolArray.length; i++){
for(int j=0; j<boolArray.length; j++){
for(int k=0; k<boolArray.length; k++){
System.out.println(String.format(Locale.US, "| %s | %s | %s || %s |", i, j, k, ((i ^ (i && (!j || !k))))));
}
}
}
System.out.println("+---+---+---++---+---+---+");
}
}
Однако, когда я запускаю это, я получаю следующие ошибки:
error: bad operand type int for unary operator '!'
System.out.println(String.format(Locale.US, "| %s | %s | %s || %s |", i, j, k, ((i ^ (i && (!j || !k))))));
^
error: bad operand type int for unary operator '!'
System.out.println(String.format(Locale.US, "| %s | %s | %s || %s |", i, j, k, ((i ^ (i && (!j || !k))))));
^
Как я могу исправить свой тестовый код, чтобы он правильно проверял все разные условия?