如果变量不匹配Java中的值列表,如何使if语句为true?

cczfrluj  于 2023-05-27  发布在  Java
关注(0)|答案(6)|浏览(142)

我试图为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编程还是个新手,所以不要害怕教我如何正确使用布尔运算符。

af7jpaap

af7jpaap1#

别害怕教我如何正确使用布尔运算符

需要知道的最基本的事情是布尔运算符接受布尔操作数(操作数是传递给运算符的参数)。
因此,在!A中,操作数A必须是类型为boolean(或Boolean)的对象;而在A || B中,操作数AB都必须是类型为boolean(或Boolean)的东西。
"Alberta" || "BC"中,您试图给予||布尔运算符 string 操作数。这就是它抱怨的。
你需要创建一个基于字符串的布尔表达式,例如:

pProvince.equals("Alberta")  // this is either true or false.

pProvince.equals("BC")  // again, either true or false.

then 用布尔运算符合并那些,例如

pProvince.equals("BC") || pProvince.equals("Alberta")  // still either true or false

then,如果需要,可以使用其他二元运算符,如!,例如

!(pProvince.equals("BC") || pProvince.equals("Alberta"))  // even now! either true or false

但是,还有其他更好的方法来针对多个字符串检查一个字符串。
在这种情况下,我会创建一组字符串:

Set<String> provinces = Set.of("Alberta", "BC");

然后使用provinces.contains(pProvince)进行检查。实际上,您可以使用任何类型的Collection而不是Set,例如。a List .但是,如果您所做的只是调用contains,则Set是最合适的,因为对于Set的实现,例如HashSet(O(1)时间)或TreeSet(O(log N)时间),可以更有效地完成。
另一种方法是使用switch语句:

switch (pProvince) {
  case "Alberta":
  case "BC":
  // ... other provinces
    //do other stuff
    break;

  default:
    //do stuff
}

另一种选择是使用正则表达式。

4uqofj5v

4uqofj5v2#

而不是这个,使用集合。声明Set,然后将所有这些值添加到它。使用set.contains进行比较

Set<String> provinces=new HashSet<>();

provinces.add("Alberta");
provinces.add("British Columbia");

if(provinces.contains(pProvince)) {
//Matched
}

这样的话,时间复杂度为O(1)。

fafcakar

fafcakar3#

在java中,不能直接在括号内使用'||'进行比较。只有这样做才行。

if (!(pProvince.equals("Alberta") || pProvince.equals("British Columbia") || pProvince.equals("Manitoba") || pProvince.equals("New Brunswick") || pProvince.equals("Newfoundland And Labrador") || pProvince.equals("Nova Scotia") || pProvince.equals("Ontario") || pProvince.equals("Prince Edward Island") || pProvince.equals("Quebec") || pProvince.equals("Saskatchewan") || pProvince.equals("Northern Territories") || pProvince.equals("Nunavut") || pProvince.equals("Yukon"))) {
    // do stuff
} else {
    // do other stuff
}

其不可读。我建议你创建一个字符串列表,然后检查value是否包含如下内容:

List<String> provinces = Arrays.asList(
    "Alberta", "British Columbia", "Manitoba", "New Brunswick", "Newfoundland And Labrador",
    "Nova Scotia", "Ontario", "Prince Edward Island", "Quebec", "Saskatchewan",
    "Northern Territories", "Nunavut", "Yukon"
);

if (!provinces.contains(pProvince)) {
    // do stuff
} else {
    // do other stuff
}
relj7zay

relj7zay4#

在Java中,要比较String值,请使用String.equals方法。

boolean value = pProvince.equals("Alberta");

由于您希望匹配一组值,因此有几种方法可以实现这一点。
您可以创建一个方法,如果参数与数组中的一组值匹配,则该方法将返回布尔值。

boolean matches(String string) {
    String[] strings = {
        "Alberta", "British Columbia", "Manitoba", "New Brunswick",
        "Newfoundland And Labrador", "Nova Scotia", "Ontario",
        "Prince Edward Island", "Quebec", "Saskatchewan",
        "Northern Territories", "Nunavut", "Yukon"
    };
    for (String value : strings) 
        if (value.equals(string)) return true;
    return false;
}

如果您熟悉正则表达式,那么另一种方法是String.matches方法,它将正则表达式模式作为参数。

boolean matches(String string) {
    String regex = 
        "Alberta|British Columbia|Manitoba|New Brunswick|" +
        "Newfoundland And Labrador|Nova Scotia|Ontario|" +
        "Prince Edward Island|Quebec|Saskatchewan|" +
        "Northern Territories|Nunavut|Yukon";
    return string.matches(regex);
}
5vf7fwbs

5vf7fwbs5#

您可以尝试:pProvince.equals("Alberta")然后你得到一个truefalse作为结果,但它只为一个。您可以使用字符串数组的所有名称,您可以检查所有的名称一步一步的“为下一个循环”

pvabu6sv

pvabu6sv6#

您看到的错误消息表明,与“”一起使用的操作数||if语句中的'(逻辑OR)运算符无效。在Java中,“||'运算符需要布尔值(truefalse)作为操作数,而不是字符串。若要在if语句中执行字符串匹配,可以使用带有方括号'(...)的'=='运算符。)'和'='运算符进行模式匹配。下面是一个示例,说明如何检查变量是否与任何指定的字符串完全匹配:

代码:

变量=“example”

if ( variable == "string1" || variable == "string2" || variable == "string3" ){ 
  //do stuff
}else{
  //do stuff}

将“string1"、“string2"和“string3”替换为您希望与变量匹配的字符串。

相关问题