我正在参加CS课程,这段代码给了我一些问题。
while (statScan.hasNext()){
currentStat = statScan.next();
if (currentStat = h);
{
hStat++;
}
System.out.println("" + currentStat);
查看“if”语句。 Java说“无法将字符串转换为布尔值”,而我的理解boolean
是一个真/假的分类,所以Java不理解的是如何评估和比较字符串。我如何强迫它这样做?
答案 0 :(得分:4)
问题是你分配它而不是询问它是否相等(指定'=',等于'==') 这是该行的解决方案: 如果它的字符串使用.equals()
if (currentStat.equals(h))
答案 1 :(得分:1)
Java中的=
运算符用作赋值运算符,因此当您编写x = y
时,您并不意味着 x等于y 但是将y的值赋给x 。
比较运算符是==
运算符,但这将比较基本类型(int,char,float等)对对象的引用,这不是您需要的常用行为。对于任何非原始类型的内容,您应该考虑使用Object
继承的boolean equals(Object o)
方法。要明确原因,请查看here或here。
答案 2 :(得分:1)
这里有一些问题:
if (currentStat = h);
首先,在结尾处有一个分号,这将导致if语句无法正常运行。它基本上是有条件地执行一个空语句。将始终运行以下代码块(您打算成为条件代码)。删除分号以避免这种情况。
此外,您只有=
而不是==
。这意味着您要将h的值分配给currentStat。这是一个经典的,经典的拼写错误。正如@YogendraSingh在其他答案中提到的那样,您应该使用equals()
方法对Java中的字符串进行比较。否则,您只是比较两个项目是否完全相同。检测何时在两个不同的对象中保存相同的字符串文本,您需要使用equals()
。
因此请将此行更改为:
if (h.equals(currentStat))
答案 3 :(得分:0)
假设h
是一个字符串,请使用equals
方法进行字符串比较:
if(currentStat.equals(h))
目前您正在使用赋值运算符 =
,它将h
的字符串值分配给currentStat
。
当您将运算符更改为比较运算符==
然后它将比较对象实例相等而不是值,我认为您不需要/