Нужна небольшая помощь с операторами Java, возникает ошибка «неверный тип операнда int для унарного оператора» - PullRequest
2 голосов
/ 11 июля 2020

У меня есть небольшой код, для которого я пытаюсь вычислить лог 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))))));
                                                                                                      ^

Как я могу исправить свой тестовый код, чтобы он правильно проверял все разные условия?

1 Ответ

1 голос
/ 11 июля 2020

В Java нельзя использовать оператор ! для целочисленного типа. В C ++ это возможно из-за неявных преобразований между логическими и целочисленными типами, но в Java такого неявного преобразования нет. Тип boolean имеет значение true или false, а целочисленный тип - это просто целое число, поэтому оператор ! не будет работать с int.

В вашем случае вы можете просто заменить значения i, j, k с boolArray[i], boolArray[j], boolArray[k], и это должно работать, как вы ожидали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...