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.
很高兴有解释
它确实编译,它不是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)