我无法获得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
我不确定我在这里做错了什么。
答案 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)