Процедура Scala застряла в бесконечном цикле (я думаю) - PullRequest
1 голос
/ 13 сентября 2011

Следующий код - это ручная версия алгоритма сортировки массива, который берет любой массив целых чисел и изменяет этот массив так, чтобы он находился в неубывающем порядке. По какой-то причине, моя консоль scala просто сидит (вроде бы на вычислительных объектах), когда я вызываю эту процедуру для массива, и я не знаю почему.

def main(a: Array[Int]) {
    var l = a.length
    var switchesLeft = true

    while( switchesLeft == true) {

      var z = 0
      var i = 0;

      while( i < l ) {
        var x = i + 1

        if( x == l ) x = 0

        if( a(i) > a(x) ) {
          // Switch the elements
          var t = a(x)
          a(x) = a(i)
          a(i) = t

          z += 1;
        }

        i += 1
      }

      if( z == 0) {
        // No switches were done
        switchesLeft = false
      }

    }
}

1 Ответ

3 голосов
/ 13 сентября 2011

Причиной езды на велосипеде является if( x == l ) x = 0. Оставьте это, и напишите while( i + 1 < l ) для условия цикла, тогда это работает.

Вот немного улучшенная версия:

def sort(a: Array[Int]) {
  var l = a.length
  var switchesLeft = true

  while(switchesLeft) {

    switchesLeft = false
    for(i <- 0 until l-1 if a(i) > a(i+1)){
      // Switch the elements
      val t = a(i+1)
      a(i+1) = a(i)
      a(i) = t

      switchesLeft = true
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...