我正在尝试使用嵌套的if语句执行“do while”循环。我正在尝试比较String变量“word”的两个可能值。如果!word.equals“deeppan或thin”做某事,否则做点什么。但它不喜欢我使用或||比较..欢迎任何建议。
do {
word = scan.next();
if ( !word.equalsIgnoreCase( "Deeppan" || "thin" ) ) {
System.out.print("Sorry you must specify a Deeppan or thin base, try again: ");
} else {
break;
}
} while ( true );
答案 0 :(得分:6)
equalsIgnoreCase
采用单个字符串参数,而不是逻辑表达式。您可以将它们与||
或&&
结合使用:
if (!word.equalsIgnoreCase( "Deeppan") && !word.equalsIgnoreCase("thin" ))
答案 1 :(得分:3)
你必须这样做:
if (!word.equalsIgnoreCase("Deeppan") && !word.equalsIgnoreCase("thin")) {
想想||我切换到&&,因为if应该只是true,如果值不是第一个而不是第二个!
答案 2 :(得分:1)
这部分是错误的,不是你如何使用布尔||
运算符,而且逻辑是不正确的:
if (!word.equalsIgnoreCase("Deeppan" || "thin"))
它应该是这样的,比较运算符比较,并注意正确的方式来说明你想要实现的效果的比较:
if (!(word.equalsIgnoreCase("Deeppan") || word.equalsIgnoreCase("thin")))
或等效地,使用De Morgan's laws(更容易阅读和理解,恕我直言):
if (!word.equalsIgnoreCase("Deeppan") && !word.equalsIgnoreCase("thin"))
答案 3 :(得分:0)
你有几个问题正在发生。第一:
"Deeppan" || "thin"
试图使用布尔“OR”运算符来比较两个字符串。 “OR”运算符只能比较布尔结果并返回作为比较结果的布尔值:
System.currentTimeMillis() == 123455667 || object.equals(this) // both sides are boolean results.
true || false // returns 'false'
但是让我们假装一秒"Deeppan" || "thin"
没问题(记住,它不是),编译器知道你要比较两个字符串。它仍然存在OR运算符返回布尔结果(true或false)的问题,然后您尝试将其传递到equalsIgnoreCase
变量上的方法word
。 equalsIgnoreCase
采用String
参数,而不是布尔值。这是第二个编译问题。正如已经指出的那样,你需要的是分别检查条件和OR结果以获得最终的布尔值
if("Deeppan".equalsIgnoreCase(word) || "thin".equalsIgnoreCase(word)) {
// do something
}
答案 4 :(得分:-2)
("Deeppan" || "thin")
是一个布尔表达式。 equalisIgnoreCase接受一个字符串。因此,您需要进行两个单独的调用和OR(布尔)结果