3

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

         while (statScan.hasNext()){

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

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

4

4 回答 4

4

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

if (currentStat.equals(h))
于 2012-12-02T01:28:06.223 回答
1

这里有几个问题:

if (currentStat =  h);

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

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

所以将此行更改为:

if (h.equals(currentStat))
于 2012-12-02T01:32:59.757 回答
1

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

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

于 2012-12-02T01:29:32.010 回答
0

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

      if(currentStat.equals(h))

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

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

于 2012-12-02T01:26:58.250 回答