2

我有这个代码:

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,我希望打印这些元素。它适用于一个字符,但是当我将 or 放在第一部分时,它给了我这个错误:“二元运算符'&&'的操作数类型错误”。我该如何解决这个问题?

谢谢你。

4

5 回答 5

5

你不能写

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

也许你打算写

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

顺便说一句你可以写

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

这样,您可以根据需要添加更多字母。

然而,写整个事情的最清晰的方法可能是

if (hand[i].startsWith("AC") || hand[i].startsWith("BC"))
于 2013-09-23T23:39:26.560 回答
2

你的问题是:

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

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

hand[i].charAt(0) == 'A' || hand[i].charAt(0) == 'B'
于 2013-09-23T23:39:10.460 回答
1

句法。每个布尔运算符(||&&等)仅适用于布尔值。没有整数(如在 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')
于 2013-09-23T23:39:02.477 回答
1

||运算符 (and &&) 仅适用于boolean值,而不适用于char值。这意味着您需要显式地编写与每个字符的每个比较。

改变:

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

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

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

于 2013-09-23T23:39:21.447 回答
1

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

if (hand[i].charAt(0) == 'A' || hand[i].charAt(0) == 'B' && hand[i].charAt(1) == 'C') 
        System.out.println(hand[i]);
        }
于 2013-09-23T23:39:22.813 回答