Scala代码不会在eclipse中运行

fai*_*lai 1 scala eclipse-juno

我一直在使用java编程,而新编译为scala.我正在尝试一些基本的scala教程.我使用eclipse Juno 4.2和scala语言的插件.安装在机器上的JDK是1.7.

下面的代码用于计算甚至斐波纳契系列的总和低于400万.当我运行代码时,eclipse没有显示任何结果,我被迫终止进程

var (a,b) = (1,2)
var sum = 0
while(a < 4000000)
{
if(a % 2 == 0)         
{ sum += a
val swap = a
a = b
b= swap + b}                            
}
println(sum)
Run Code Online (Sandbox Code Playgroud)

另一方面,当我将变量a的默认值更改为2时

var (a,b) = (2,2)
Run Code Online (Sandbox Code Playgroud)

系统编译并运行以给出这个答案1383447424

当变量a使用默认值1时,不知道为什么eclipse Juno不编译scala代码.机器上安装的JDK是JDK 1.7.

很高兴有解释

dhg*_*dhg 6

它确实编译,它不是Eclipse问题.

代码有一个无限循环a=1.如果您格式化代码,您会发现它看起来像这样:

var (a, b) = (1, 2)
var sum = 0
while (a < 4000000) {
  if (a % 2 == 0) {     <-- This scopes over everything in the loop!
    sum += a
    val swap = a
    a = b
    b = swap + b
  }
}
println(sum)
Run Code Online (Sandbox Code Playgroud)

所以while块中唯一的东西是条件if(a%2==0).因为a=1,它不是2的倍数,因此if从不执行代码,所以它只是围绕循环而不做任何事情.

如果你开始a=2那么a%2==0是真的,所以块执行,你没有得到无限循环.但它实际上并没有像你想要的那样给你甚至斐波那契数字的总和.

问题是if语句应该仅限于该sum += a行.

var (a, b) = (1, 2)
var sum = 0
while (a < 4000000) {
  if (a % 2 == 0)
    sum += a
  val swap = a
  a = b
  b = swap + b
}
println(sum)
Run Code Online (Sandbox Code Playgroud)