【问题标题】:Issue with the "if" statement“if”语句的问题
【发布时间】:2012-11-19 20:56:51
【问题描述】:

我正在上 CS 课程,但这段代码给我带来了问题。

         while (statScan.hasNext()){

        currentStat = statScan.next();
        if (currentStat =  h);
        {       
            hStat++;
        }
        System.out.println("" + currentStat);

查看“if”语句。 Java 说“无法将字符串转换为布尔值”,据我了解,boolean 是一个真/假的事情,所以 Java 不理解的是如何评估和比较字符串。我该如何强制它这样做?

【问题讨论】:

    标签: java if-statement boolean


    【解决方案1】:

    问题是你分配它而不是询问它是否相等(分配'=',等于'==')
    这是该行的解决方案: 如果它是字符串,也使用 .equals()

    if (currentStat.equals(h))
    

    【讨论】:

    • 不要在对象上使用 ==。使用 .equals 代替。
    • 它在评论中,我说如果那是一个字符串(它是)他应该使用 equals
    • @GoranŠtuc 您最好编辑问题并改用等号
    • 那里,如果您使用 if 语句来避免将来出现此类错误,如果它是针对常量的,那么还有一个建议,例如:DialogResult dr = someform.showdialog(); if(DialogResult.Ok == dr){}
    【解决方案2】:

    Java 中的= 运算符旨在用作赋值运算符,因此当您编写x = y 时,您的意思不是x 等于y,而是将y 的值分配给x.

    比较运算符是== 运算符,但这将比较原始类型(int、char、float 等)或对不是您通常需要的行为的对象的引用。对于任何不是原始类型的东西,您应该考虑使用Object 继承的方法,即boolean equals(Object o)。要确切了解为什么会这样,请查看 herehere

    【讨论】:

      【解决方案3】:

      这里有几个问题:

      if (currentStat =  h);
      

      首先,您在末尾有一个分号,这将导致 if 语句无法按您想要的方式运行。它基本上是有条件地执行一个空语句。以下代码块(您打算有条件)将始终运行。删除分号以避免这种情况。

      另外,您只有= 而不是==。这意味着您将 h 的值分配给 currentStat。这是一个经典的,经典的错字。正如另一个答案中提到的@YogendraSingh,您应该使用equals() 方法对Java 中的字符串进行比较。否则你只是比较看看这两个项目是否完全相同。请检测何时将相同的字符串文本保存在您需要使用equals() 的两个不同对象中。

      所以将这一行改为:

      if (h.equals(currentStat))
      

      【讨论】:

      • 感谢捡起流浪分号。
      【解决方案4】:

      假设h是一个字符串,使用equals方法进行字符串比较为:

            if(currentStat.equals(h))
      

      目前您正在使用赋值运算符 =,它将h 的字符串值分配给currentStat

      当您将运算符更改为比较运算符== 然后它将比较对象实例相等性而不是值,我认为您不想要/

      【讨论】:

      • @user1869638:这次我对使用== 运算符来比较字符串的建议感到非常惊讶,而且还获得了如此多的投票:) 我以前从未见过这种情况。可能是,我在这里错过了一些大事。由于您使用的是scan.next(),我知道它的字符串,因此我建议您使用equals 而不是==
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 2021-05-15
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      相关资源
      最近更新 更多