Java中如何实现变量不匹配值列表时if条件为true?
问题原因
你报错的核心是**||逻辑或运算符只能连接布尔值,不能直接拼接字符串**。你写的"Alberta"||"British Columbia"是把两个字符串用||连起来,这不符合Java语法——||两边必须是能返回true/false的布尔表达式,字符串本身不是布尔值,所以编译器报错。
另外还有个隐藏问题:Java里字符串比较不能用!=或==(除非是常量池里的字符串),因为这俩比较的是对象的内存地址,不是字符串内容。正确的字符串相等判断要用equals()方法。
解决方法
方法1:多个条件用&&组合(适合少量选项)
要判断变量不等于所有指定省份,需要把每个“不等于”的布尔条件用&&(逻辑与)连接——因为只有当所有条件都满足(变量不等于每一个省份)时,整体才为true。
修正后的代码:
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 }
方法2:用集合判断(适合大量选项,代码更简洁)
把所有合法省份放进一个Set,然后通过contains()方法判断变量是否不在集合里,代码更易维护:
import java.util.Set; import java.util.HashSet; // 可以把集合定义成常量,放在类里 private static final Set<String> VALID_PROVINCES = new HashSet<>(); static { VALID_PROVINCES.add("Alberta"); VALID_PROVINCES.add("British Columbia"); VALID_PROVINCES.add("Manitoba"); VALID_PROVINCES.add("New Brunswick"); VALID_PROVINCES.add("Newfoundland And Labrador"); VALID_PROVINCES.add("Nova Scotia"); VALID_PROVINCES.add("Ontario"); VALID_PROVINCES.add("Prince Edward Island"); VALID_PROVINCES.add("Quebec"); VALID_PROVINCES.add("Saskatchewan"); VALID_PROVINCES.add("Northern Territories"); VALID_PROVINCES.add("Nunavut"); VALID_PROVINCES.add("Yukon"); } // 然后在判断的地方写 if(!VALID_PROVINCES.contains(pProvince)){ //do stuff }else{ //do other stuff }
布尔运算符正确使用指导
||(逻辑或):只要任意一个条件为true,整体结果就是true。比如if(a > 5 || b < 3),只要a大于5或者b小于3,条件就成立。&&(逻辑与):必须所有条件都为true,整体结果才是true。比如if(a > 5 && b < 3),只有a大于5且b小于3时,条件才成立。- 注意事项:
||和&&两边必须是布尔表达式(能返回true/false的语句),不能是数字、字符串等其他类型。 - 字符串比较:永远用
equals()方法判断内容是否相等,用!equals()判断不相等。不要用==或!=,除非你明确要比较对象的内存地址。
内容的提问来源于stack exchange,提问作者MilliwaysBartender
相关产品推荐
相关产品推荐

