Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops Scala程序卡在无限循环中(我想)_Loops_Scala - Fatal编程技术网

Loops Scala程序卡在无限循环中(我想)

Loops Scala程序卡在无限循环中(我想),loops,scala,Loops,Scala,下面的代码是数组排序算法的手动版本,它获取任何整数数组,并更改该数组,使其处于非递减顺序。出于某种原因,当我在数组上调用这个过程时,我的scala控制台就在那里(似乎是在计算),我不知道为什么 def main(a: Array[Int]) { var l = a.length var switchesLeft = true while( switchesLeft == true) { var z = 0 var i = 0; w

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

    }
}
def main(a:Array[Int]){ var l=a.长度 var开关左=真 while(switchesleet==true){ var z=0 var i=0; 而(ia(x)){ //切换元素 var t=a(x) a(x)=a(i) a(i)=t z+=1; } i+=1 } 如果(z==0){ //没有进行任何切换 switchesleet=false } } }
循环的原因是
如果(x==l)x=0
。省去它,在循环条件为(i+1时写入
,然后它工作

下面是一个稍微改进的版本:

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
    }
  }
}
def排序(a:Array[Int]){
var l=a.长度
var开关左=真
while(开关左){
switchesleet=false
(i a(i+1)){
//切换元素
val t=a(i+1)
a(i+1)=a(i)
a(i)=t
switchesleet=true
}
}
}

您尝试过登录吗?我不知道Scala,但在其他语言中,我会记录每次迭代的值。感谢您的回答和改进的解决方案。为什么(x==l)x=0会导致循环?我每次都在增加,所以从我的角度来看,它应该打破循环。也就是说,我到底忽略了什么/误解了什么?将x设置为0后,将最后一个元素a(I)与第一个元素a(x)进行比较,并将较大的值放在第一个位置。在下一个循环步骤中,这个元素再次冒泡,直到你把它放回前面。啊,这是有意义的。非常感谢。