【问题标题】:Need a bit of assistance with Java operators, getting a "bad operand type int for unary operator" error需要 Java 运算符的一些帮助,得到“一元运算符的错误操作数类型 int”错误
【发布时间】:2020-07-11 17:52:19
【问题描述】:

我有一些代码正在尝试找出其逻辑。在这段代码中,我有三个布尔值:

  • 有帐户

  • 不活动

  • 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))))));
                                                                                                      ^

如何修复我的测试代码,以便正确测试所有不同的条件?

【问题讨论】:

  • 当你需要一个布尔值时,似乎你只需要用 boolArray[i], boolArray[j], boolArray[k] 替换 i,j,k。
  • 成功了...谢谢!

标签: java operators


【解决方案1】:

在 Java 中,您不能在整数类型上使用 ! 运算符。在 c++ 中,您可以,因为布尔类型和整数类型之间的隐式转换,但在 Java 中,没有这种隐式转换。 boolean 类型要么是真要么是假,而整数类型只是一个整数,这就是为什么 ! 运算符不适用于 int。

在您的情况下,您可以将 i, j, k 值替换为 boolArray[i], boolArray[j], boolArray[k],这应该可以按预期工作。

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多