Scala程序陷入无限循环(我认为)

时间:2011-09-13 02:50:20

标签: loops scala

以下代码是数组排序算法的手动版本,采用任何整数数组,并更改该数组以使其处于非递减顺序。出于某种原因,当我在一个数组上调用这个过程时,我的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 个答案:

答案 0 :(得分:3)

骑自行车的原因是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
    }
  }
}