我的代码导致无限循环

时间:2017-07-27 10:12:48

标签: ruby

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或负数,我该如何避免进入循环。

2 个答案:

答案 0 :(得分: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}"

希望有所帮助

答案 1 :(得分:0)

回答你的问题:

您的代码运行良好,并完全按照要求执行操作: while x is not 1 OR x is smaller than 0 do this codeblock。 如果将x设置为负数,则x将永远不会为正数,因此它将永远运行(因为x总是小于0)。

所以,代码是正确的,但它背后的逻辑有一个缺陷:)