Loops Scala程序卡在无限循环中(我想)
下面的代码是数组排序算法的手动版本,它获取任何整数数组,并更改该数组,使其处于非递减顺序。出于某种原因,当我在数组上调用这个过程时,我的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
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;
而(i循环的原因是
如果(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)进行比较,并将较大的值放在第一个位置。在下一个循环步骤中,这个元素再次冒泡,直到你把它放回前面。啊,这是有意义的。非常感谢。