【问题标题】:Ruby FIzz-buzz can't push numbers to an arrayRuby FIzz-buzz 无法将数字推送到数组
【发布时间】:2015-09-07 18:40:05
【问题描述】:

因此,如您所见,我并不精通 Ruby,因此如果您保持原始响应而不是使用捷径,这会有所帮助。

我能够在第一个示例中使我的 fizz-buzz 工作,我添加了绝对方法来处理负输入并使用变量来轻松适应将 3 和 5 更改为其他数字。但是,我无法将结果推送到数组中,我只会得到“1”。有谁知道我哪里出错了?

# not array - works
class Fixnum
  define_method(:fizz_buzz) do
    fizz = 3
    buzz = 5

    1.upto(self.abs) do |i|
      if (i % fizz == 0) && (i % buzz == 0)
        puts "fizz-buzz"
      elsif (i % fizz == 0)
        puts "fizz"
      elsif (i % buzz == 0)
        puts "buzz"
      else
        puts i
      end
    end
  end
end


# push to array - doesn't work
class Fixnum
  define_method(:fizz_buzz) do
    fizz = 3
    buzz = 5
    array = []

    1.upto(self.abs) do |i|
      if (i % fizz == 0) && (i % buzz == 0)
        array.push("fizz-buzz")
      elsif (i % fizz == 0)
        array.push("fizz")
      elsif (i % buzz == 0)
        array.push("buzz")
      else
        array.push(i)
      end
    end
  end
end
=> 1 

WW

【问题讨论】:

    标签: ruby fizzbuzz


    【解决方案1】:

    你需要在函数结束时返回你的数组。

    class Fixnum
      define_method(:fizz_buzz) do
        fizz = 3
        buzz = 5
        array = []
    
        1.upto(self.abs) do |i|
          if (i % fizz == 0) && (i % buzz == 0)
            array.push("fizz-buzz")
          elsif (i % fizz == 0)
            array.push("fizz")
          elsif (i % buzz == 0)
            array.push("buzz")
          else
            array.push(i)
          end
        end
        array
      end
    end
    

    在 ruby​​ 中,函数的最后一行用作您的返回值。当您调用1.upto 时,它会运行给定块指定的次数,然后返回1。在末尾添加array 使其返回数组。

    【讨论】:

    • 该死!我总是忘记那部分。谢谢@rdubya
    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多