簡體   English   中英

我不明白這個“如果”陳述有什么問題

[英]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

有一種更簡單的方法來執行此操作,而無需檢查所有情況。

創建一個數組並將結果字符串放在此處。

  • 如果數字可以被3整除,則將Fizz附加到數組。
  • 如果數字可以被5整除,則將Buzz附加到數組中。
    • 請注意,在執行此操作時,如果我們有一個可被3 5整除的數字,則將Fizz和Buzz附加到數組中。
  • 如果我們根本沒有將任何內容推入數組,請附加數字。
  • 連接數組的所有元素,然后打印出來。

這是一個片段。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM