Ruby:FizzBu​​zz没有按预期工作

时间:2014-06-26 16:17:05

标签: ruby

我无法获得IF声明以产生我认为应该的结果。我不确定为什么我不能得到&& ("和")有条件的工作。

def fizzbuzz(n)
  pool = []
    (1..n).each do |x|
        if x % 3 == 0
            pool.push('Fizz')
        elsif x % 5 == 0
            pool.push('Buzz')
        elsif x % 3 == 0 && x % 5 == 0
            pool.push('FizzBuzz')
        else
            pool.push(x)
        end
    end
    puts pool
end

fizzbuzz(10)

他们的结果

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz

我不确定我在这里做错了什么。

3 个答案:

答案 0 :(得分:4)

if / else if / else分支仅执行其中一个代码块。如果条件为真,则执行以下块,程序将跳到if / else语句的末尾。

答案 1 :(得分:4)

请改为尝试:

def fizzbuzz(n)
  pool = []
    (1..n).each do |x|
        if x % 3 == 0 && x % 5 == 0
            pool.push('FizzBuzz')
        elsif x % 5 == 0
            pool.push('Buzz')
        elsif x % 3 == 0
            pool.push('Fizz')
        else
            pool.push(x)
        end
    end
    puts pool
end

当你使用if / elsif / elsif / else时,它将只执行其中一个条件。如果x%3 == 0,那就是它,ruby将不再进入任何这些条件,这就是永远不会打印fizzbuzz的原因。

答案 2 :(得分:3)

这是另一个工作版本,它有点清洁,但正如Tiago Farias所说,你不会在[1..10]范围内打印'fizzbuzz'消息,因为你没有值对于%3和%5,其余的都是0,最接近的将是15。

def fizzbuzz(n)
  @pool = []
  (1..n).each do |x|
    send_no x
  end
  puts @pool
end

def send_no x
  return @pool << 'fizzbuzz' if x % 3 == 0 && x % 5 == 0
  return @pool << 'fizz' if x % 3 == 0
  return @pool << 'buzz' if x % 5 == 0
  @pool << x
end

fizzbuzz(10)