我试图为if语句创建一个布尔条件,如果变量与以下任何字符串完全匹配,则该条件为true,但我一直得到这个错误:error: bad operand types for binary operator '||'
我现在的代码是:
if(pProvince != ("Alberta"||"British Columbia"||"Manitoba"||"New Brunswick"||"Newfoundland And Labrador"||"Nova Scotia"||"Ontario"||"Prince Edward Island"||"Quebec"||"Saskatchewan"||"Northern Territories"||"Nunavut"||"Yukon")){
//do stuff
}else{
//do other stuff
}
有什么建议吗?我对java编程还是个新手,所以不要害怕教我如何正确使用布尔运算符。
6条答案
按热度按时间af7jpaap1#
别害怕教我如何正确使用布尔运算符
需要知道的最基本的事情是布尔运算符接受布尔操作数(操作数是传递给运算符的参数)。
因此,在
!A
中,操作数A
必须是类型为boolean
(或Boolean
)的对象;而在A || B
中,操作数A
和B
都必须是类型为boolean
(或Boolean
)的东西。在
"Alberta" || "BC"
中,您试图给予||
布尔运算符 string 操作数。这就是它抱怨的。你需要创建一个基于字符串的布尔表达式,例如:
或
和 then 用布尔运算符合并那些,例如
和 then,如果需要,可以使用其他二元运算符,如
!
,例如但是,还有其他更好的方法来针对多个字符串检查一个字符串。
在这种情况下,我会创建一组字符串:
然后使用
provinces.contains(pProvince)
进行检查。实际上,您可以使用任何类型的Collection
而不是Set
,例如。aList
.但是,如果您所做的只是调用contains
,则Set
是最合适的,因为对于Set
的实现,例如HashSet
(O(1)时间)或TreeSet
(O(log N)时间),可以更有效地完成。另一种方法是使用
switch
语句:另一种选择是使用正则表达式。
4uqofj5v2#
而不是这个,使用集合。声明Set,然后将所有这些值添加到它。使用set.contains进行比较
这样的话,时间复杂度为O(1)。
fafcakar3#
在java中,不能直接在括号内使用
'||'
进行比较。只有这样做才行。其不可读。我建议你创建一个字符串列表,然后检查value是否包含如下内容:
relj7zay4#
在Java中,要比较
String
值,请使用String.equals
方法。由于您希望匹配一组值,因此有几种方法可以实现这一点。
您可以创建一个方法,如果参数与数组中的一组值匹配,则该方法将返回布尔值。
如果您熟悉正则表达式,那么另一种方法是
String.matches
方法,它将正则表达式模式作为参数。5vf7fwbs5#
您可以尝试:
pProvince.equals("Alberta")
然后你得到一个true
或false
作为结果,但它只为一个。您可以使用字符串数组的所有名称,您可以检查所有的名称一步一步的“为下一个循环”pvabu6sv6#
您看到的错误消息表明,与“”一起使用的操作数||if语句中的'(逻辑OR)运算符无效。在Java中,“||'运算符需要布尔值(true或false)作为操作数,而不是字符串。若要在if语句中执行字符串匹配,可以使用带有方括号'(...)的'=='运算符。)'和'='运算符进行模式匹配。下面是一个示例,说明如何检查变量是否与任何指定的字符串完全匹配:
代码:
变量=“example”
将“string1"、“string2"和“string3”替换为您希望与变量匹配的字符串。