Код Scala не работает в eclipse juno

Я программировал на Java и новичок в scala. пробовал свои силы в некоторых основных учебниках по Scala. Я использую eclipse Juno 4.2 с плагином для языка Scala. На машине установлен JDK версии 1.7.

приведенный ниже код предназначен для расчета суммы четных рядов Фибоначчи ниже 4 миллионов. когда я запускаю код, затмение не показывает никакого результата, и я вынужден завершить процесс

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)

с другой стороны, когда я изменяю значение переменной a по умолчанию на 2, то есть

var (a,b) = (2,2)

система компилируется и запускается, чтобы дать этот ответ 1383447424

не знаю, почему eclipse Juno не компилирует код scala, когда переменная a использует значение по умолчанию, равное 1. JDK, установленный на машине, - это JDK 1.7.

Буду очень рад пояснениям


person faisal abdulai    schedule 03.07.2012    source источник


Ответы (1)


Он компилируется, и это не проблема 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)

Так что в блоке 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)
person dhg    schedule 03.07.2012
comment
спасибо dhg Теперь я понимаю, в чем проблема. Guess ожидал, что код будет творить чудеса, а не понимать, что я прошу сделать компилятор. - person faisal abdulai; 04.07.2012