2012-12-02 130 views
3

我正在参加CS课程,并且此代码给我带来了问题。“if”语句问题

  while (statScan.hasNext()){ 

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

看看“if”语句。 Java说“不能将字符串转换为布尔值”,根据我的理解,boolean是一个真正的/错误的东西,所以Java不理解的是如何评估和比较字符串。我如何强迫它这样做?

回答

1

Java中的=操作旨在.equals()一个因此,当您编写x = y时,并不意味着等于y,而是将y的值赋给x

比较运算符是==运算符,但它会比较原始类型(int,char,float等),或者引用不是您需要的常用行为的对象。对于任何不是原始类型的东西,应该考虑使用Object继承的方法,即boolean equals(Object o)。要明白为什么如此,请看一下herehere

0

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

 if(currentStat.equals(h)) 

目前使用的是赋值运算符=,其分配的hcurrentStat字符串值。

当您更改运营商比较操作==然后它将比较对象实例平等,而不是价值,我想你不希望/

+0

@ user1869638:我真的很惊讶这个时候使用''==操作符来比较字符串的建议,并且也越来越投了那么多的:)我有从来没有见过这个。可能是,我在这里错过了一些很大的东西。既然你使用'scan.next()',我知道它的字符串,因此我建议你使用'equals'而不是'=='。 –

4

做的问题是,你分配给它,而不是问,如果是等于(指定“=”,等于“==”)
这是该行的解决方案: 还,如果是字符串使用

if (currentStat.equals(h)) 
+1

不要在对象上使用==。改用.equals。 – ApproachingDarknessFish

+0

它是在评论中,我说如果这是一个字符串(它是),他应该使用等于 –

+0

@GoranŠtuc你最好编辑的问题,并把等于 – dreamcrash

1

这里的几个问题:

if (currentStat = h); 

首先,你必须在最后一个分号,这将导致你想要的if语句不发挥作用。它基本上有条件地执行一个空语句。以下代码块(您打算成为有条件的)将始终运行。删除分号以避免这种情况。

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

因此改变这一行:

if (h.equals(currentStat)) 
+0

拿起流浪分号的荣誉。 – msandiford