[英]I don't understand what is wrong with this “if” statement
我有一個簡單的程序,但我不明白這是什么問題。
(1..100).each do|i|
if(i%3 == 0)
puts "Fizz"
elsif(i%5 == 0)
puts "Buzz"
elsif((i%5 == 0) && (i%3 == 0))
puts "FizzBuzz"
else
puts "#{i}"
end
end
一切正常,除了可以被5和3整除的數字。
當我運行程序時,我得到
1,2,Fizz,4,Buzz,.......,14,Fizz,...
問題是什么?
如果它可以被3和5整除,則較早的if
/ elsif
可以捕獲它。 該行不應為elsif
,而應為if
,否則您需要在各個部分之前對其進行測試。
基本上,邏輯流程不正確。
用5和3整除的每個數字,請注意, if (i%3 == 0)
首先為真,則它們使條件成立。 因此,永遠不會輸入elsif((i%5 == 0) && (i%3 == 0))
。
一個簡單的解決方法是先檢查((i%5 == 0) && (i%3 == 0))
。
您會誤認為一旦滿足if
的條件,就不會去檢查其余條件。
一種聰明的方法是在這種情況下使用mod 15,例如:
(1..100).each do|i|
if(i%15 == 0)
puts "FizzBuzz"
elsif(i%3 == 0)
puts "Fizz"
elsif(i%5 == 0)
puts "Buzz"
else
puts "#{i}"
end
end
有一種更簡單的方法來執行此操作,而無需檢查所有情況。
創建一個數組並將結果字符串放在此處。
這是一個片段。
def fizzbuzz
(1..100).each do|i|
r = []
if(i % 3 == 0)
r << "Fizz"
end
if(i % 5 == 0)
r << "Buzz"
end
if r.empty?
r << i
end
puts r.join
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.