2017-04-12 112 views
0
A = [5,3,1,4,2] 

4.downto(1) do |i| 
    0.upto(i) do |j| 
    #here i am making the actual buble sort 

    if A[j] > A[j + 1] 
     tmp = A 
     A[j + 1] = A[j] 
     A[j] = tmp 
    end 
    end 
end 

#just printing the array 
A.each do |i| 
    print i 
end 

gets() 

有人知道为什么会发生?我只是不知道nil元素在哪里。它说'Fixnum与零比较失败',我不知道为什么

我试了一切,我知道但我正在学习,我找不到错误。

感谢您的帮助,另外还有一个小问题,当我尝试使for循环不起作用时,这不是什么大问题,因为有多种方法可以做出同样的事情,但仍然存在...

回答

3

i = 4j = i + 1 #=> 5,您尝试执行

A[j] > A[j + 1] 

计算结果为

A[4] > A[5] 

然后

2 > nil 

这就提出了一个例外,因为2.class #=> FixnumFixnum#>需要>的说法是数字。在Ruby v2.4 + Fixnum方法中已经转换为Integer方法(例如,Integer#>)。

相关问题