我是scala的新手,但我遇到了以下代码的问题:
var c:Int = 0
var j:Int = 0
for( c <- 0 to 100){
for( j <- 0 to 100){
/* Check if jth bit in c is set,
if( (c & (1<<j)) ) // this line is the line where i get the error
xs :+ (ys(j)) // this is copying element j from list ys to list xs
}
}
我得到的错误是: 类型不匹配; found:Int required:Boolean
代码(c & (1<<j))
应该将1个左j位移位,然后将结果按位并将其转换为变量c中的int以获得布尔结果。
我完全有可能做错了。我已经学习了Scala 3天了,而且我的java非常生疏。
任何帮助都会被哄骗
答案 0 :(得分:2)
Scala中的按位运算(实际上是在任何语言中)返回类型Int
的结果,if表达式需要Boolean
类型。 Scala不会将Boolean
值视为C,您的代码可以正常工作。
您可以通过明确测试Boolean
:
1
if((c & (1 << j)) != 0)
答案 1 :(得分:1)
与C(或C ++)不同,Scala的if
语句(就像Java一样)只接受Boolean
表达式,并且没有从整数类型到{{的隐式类型提升1}}。因此,您需要明确说明您想要的内容,并将Boolean
替换为if( (c & (1<<j)) )