Die Fehlermeldung undefined method '<' for nil:NilClass
bedeutet, dass Sie versuchen, <
auf etwas aufzurufen, das nil
ist.
In Ihrem Beispiel muss dies der if arr[cntr] < arr[cntr + 1]
Vergleich sein. In einem nächsten Schritt müssen wir herausfinden, warum arr[cntr]
nil
ist. Ein Grund könnte sein, dass es im arr
Array im cntr
Index kein Element gibt, ein anderer Grund könnte sein, dass der Index cntr
außerhalb der Grenzen des Arrays liegt. In Ihrem Beispiel ist dies der zweite Grund, der das Problem verursacht.
Warum ist der Index außerhalb der Grenzen? Werfen wir einen genaueren Blick haben, wie die Schleife bauen und verwenden [a, b, c]
ein Beispiel Array so zu tun:
length = arr.length # length = 3 # [a, b, c].length
length.downto(0) do |cntr| # 3.downto(0) do |cntr|
if arr[cntr] < arr[cntr + 1] # if arr[3] < arr[4] # in the first iteration
Ops gibt es nicht nicht Indizes 3
und 4
im arr
Array, weil Indizes Zählen beginnen mit 0
und In meinem Beispiel gibt es nur 3 Elemente (das macht den Index des letzten Elements 2
).
Das Update:
def bubble_sort(array)
(array.length - 2).downto(0).each do |index|
if array[index] < array[index + 1]
# ...
end
end
end
Danke für die ausführliche Erklärung! – jibzoiderz