0

我是 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     
  }
}

我得到的错误是:类型不匹配;找到:需要 Int:布尔值

代码 (c & (1<<j)) 应该将 1 左移 j 位,然后将结果按位与变量 c 中的 int 相乘以获得布尔结果。

我完全有可能做错了什么。我学习 Scala 已经 3 天了,我对我的 java 非常生疏。

任何帮助将不胜感激

4

2 回答 2

2

Scala 中的按位运算(实际上在任何语言中)都会返回 type 的结果Int,您的 if 表达式需要Boolean. Scala 不会Boolean像 C 那样处理值,您的代码可以正常工作。

Boolean您可以通过显式测试来使您的表达式返回 a 1

if((c & (1 << j)) != 0)
于 2013-04-03T05:47:49.423 回答
1

与 C(或 C++)不同,Scala 的if语句(就像 Java)只接受一个Boolean表达式,并且没有从整数类型到Boolean. 所以你需要明确你想要什么,并替换if( (c & (1<<j)) )if( (c & (1<<j)) != 0)

于 2013-04-03T05:52:41.803 回答