为什么我的java if语句不起作用并给我这个错误:“二元运算符’&&”的错误操作数类型?

我有这个代码:

int i; for (i = 0; i < 13; ++i) { if (hand[i].charAt(0) == 'A' || 'B' && hand[i].charAt(1) == 'C') System.out.println(hand[i]); } 

基本上我想要做的是如果每个数组元素中索引0处的字符是A或B,并且每个数组元素中第二个索引处的字符是C,我希望打印这些元素。 它适用于一个字符,但是当我把它放在第一部分时,它给了我这个错误:“二元运算符的错误操作数类型’&&’”。 我该如何解决这个问题?

谢谢。

你不能写

 hand[i].charAt(0) == 'A' || 'B' 

也许你打算写

 hand[i].charAt(0) == 'A' || hand[i].charAt(0) == 'B' 

BTW你可以写

 "AB".indexOf(hand[i].charAt(0)) >= 0 

这样,如果您愿意,可以添加更多字母。

然而,编写整个事物的最清晰的方式可能是

 if (hand[i].startsWith("AC") || hand[i].startsWith("BC")) 

你的问题是:

 hand[i].charAt(0) == 'A' || 'B' 

逻辑OR不会像您认为的那样工作。 使用:

 hand[i].charAt(0) == 'A' || hand[i].charAt(0) == 'B' 

句法。 每个布尔运算符( ||&&等)仅适用于布尔值。 没有整数(比如C)并且没有字符。

 if (hand[i].charAt(0) == 'A' || 'B' && hand[i].charAt(1) == 'C') 

应该

 if ((hand[i].charAt(0) == 'A' || hand[i].charAt(0) == 'B') && hand[i].charAt(1) == 'C') 

|| operator(和&& )仅适用于boolean值,而不是char值。 这意味着您需要明确地为每个字符编写每个比较。

更改:

 hand[i].charAt(0) == 'A' || 'B' 

 (hand[i].charAt(0) == 'A' || hand[i].charAt(0) == 'B') 

“或”条件括在括号中,因此在&&之前进行评估,这是我认为你的意图。

因为它用于比较布尔值,所以传递的是char而不是布尔值。

 if (hand[i].charAt(0) == 'A' || hand[i].charAt(0) == 'B' && hand[i].charAt(1) == 'C') System.out.println(hand[i]); }