2017-07-27 109 views
-1
puts "enter a number" 
x = gets.chomp.to_i 
y = 0 
while x != 1 
    y += 1 
    if x % 2 == 0 
    x = x/2 
    else 
    x = x*3 + 1 
    end 
    print "#{x} " 
end 

puts "\nThe number of sequence is #{y+1}" 

嗨,如果我鍵入負數或0,我會得到一個無限循環。如果我的號碼是0或負數,我該如何避免進入循環。我的代碼導致無限循環

+4

_Sidenote:_規則thumb:在Ruby中如果你使用while循環,你做錯了。 – mudasobwa

+0

您的情況是多餘的。如果'x <0',則遵循'x!= 1'。 – sawa

+0

@mudasobwa雖然這是真的,當迭代的次數是不確定的,因爲在這個問題中,這是可以接受的。 –

回答

1

您可以使用x > 1

puts "enter a number" 
x = gets.chomp.to_i 
# if you want to consider negative as positive then x = gets.chomp.to_i.abs 
y = 0 
while (x > 1) 
    y += 1 
    if x % 2 == 0 
    x = x/2 
    else 
    x = x*3 + 1 
    end 
    print "#{x} " 
end 

puts "\nThe number of sequence is #{y+1}" 

希望它可以幫助

+0

嗨,以前我對自己感到困惑,我改變了我的問題,希望現在有意義。 – roppo

+0

已更新我的對照@roppo – Dark

+0

對於0的情況如何? – roppo

0

要回答你的問題:

您的代碼工作得很好,並也正是它被告知要做到: while x is not 1 OR x is smaller than 0 do this codeblock。 如果將x設置爲負數,x永遠不會是正數,因此它會永遠運行(因爲x總是小於0)。

因此,該代碼是正確的,但在邏輯缺陷背後:)

+0

嗨,以前我對自己感到困惑,我改變了我的問題,希望它現在有意義。 – roppo