【问题标题】:until loop is getting stuck; acting strangely?直到循环卡住;行为怪异?
【发布时间】:2014-02-21 14:18:51
【问题描述】:

我有下面的循环,它的行为对我来说似乎很奇怪。

这是二十一点游戏的一部分,它要求用户输入赌注。如果赌注大于用户拥有的金额,则循环返回。

c 在这里等于 500:

b = 90000000
until b < c
  puts "You have $" + c.to_s + "."
  puts "How much do you want to bet? "
  b = gets.to_i
  if b < c
    @bet = gets.to_i
  else
    puts "Nice try."
  end
end

我将b 设置为较大的数字,以确保循环至少运行一次。当我开始循环并输入比我拥有的钱高的数字时,它会做它应该做的事情,并循环要求下注。但是,当我最终输入有效数量时,循环会卡住。

然后,当我将b 设置为足够低的数字以便它跳过until 时,一切正常。

有人知道为什么我的循环卡住了吗?

【问题讨论】:

  • 反转你的until的逻辑。而是使用while b &gt;= c 或简单的loopbreak 来测试您的状况。 until 否定逻辑,使其更难阅读和理解。它是 Ruby 的一部分,但由于这个原因很少使用。

标签: ruby ruby-1.9.3


【解决方案1】:

不是“粘”,是在等待 IO。

您在if b &lt; c 块内对gets 进行了第二次调用。您的循环正在执行最后一次,您正在输入一个值

将你的内部 if 块更改为

if b < c
  @bet = b
else
  puts "Nice try."
end

你应该没事的。

【讨论】:

    最近更新 更多