需要一些 Java 运算符的帮助,出现 "bad operand type int for unary operator" 错误
Need a bit of assistance with Java operators, getting a "bad operand type int for unary operator" error
我有一些代码,我试图找出其中的逻辑。在这段代码中,我有三个布尔值:
有帐号
处于非活动状态
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))))));
^
如何修复我的测试代码,以便它正确测试所有不同的条件?
在 Java 中,不能对整数类型使用 !
运算符。在c++中可以,因为boolean类型和integer类型之间存在隐式转换,但是在Java中没有这种隐式转换。 boolean
类型只是 true 或 false,整数类型只是一个整数,这就是 !
运算符不适用于 int 的原因。
对于您的情况,您只需将 i, j, k
值替换为 boolArray[i], boolArray[j], boolArray[k]
即可,这应该会如您所愿。
我有一些代码,我试图找出其中的逻辑。在这段代码中,我有三个布尔值:
有帐号
处于非活动状态
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))))));
^
如何修复我的测试代码,以便它正确测试所有不同的条件?
在 Java 中,不能对整数类型使用 !
运算符。在c++中可以,因为boolean类型和integer类型之间存在隐式转换,但是在Java中没有这种隐式转换。 boolean
类型只是 true 或 false,整数类型只是一个整数,这就是 !
运算符不适用于 int 的原因。
对于您的情况,您只需将 i, j, k
值替换为 boolArray[i], boolArray[j], boolArray[k]
即可,这应该会如您所愿。