做while循环比较字符串

时间:2013-12-10 16:20:14

标签: java do-while

我正在尝试使用嵌套的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 );

5 个答案:

答案 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变量上的方法wordequalsIgnoreCase采用String参数,而不是布尔值。这是第二个编译问题。正如已经指出的那样,你需要的是分别检查条件和OR结果以获得最终的布尔值

if("Deeppan".equalsIgnoreCase(word) || "thin".equalsIgnoreCase(word)) {
   // do something
}

答案 4 :(得分:-2)

("Deeppan" || "thin")

是一个布尔表达式。 equalisIgnoreCase接受一个字符串。因此,您需要进行两个单独的调用和OR(布尔)结果