質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

4回答

1581閲覧

for文の関して

cheeeeeeese

総合スコア179

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

2クリップ

投稿2015/07/28 05:15

皆様、お疲れ様です。質問させていただきます。

内容
FizzBuzz問題をfor文で記述したものを学習したいと考えています。
何卒よろしくお願い申し上げます。
①のコード

for i in 1..100 if i % 5 == 0 if i % 3 == 0 puts "FizzBuzz" end puts "Buzz" elsif i % 3 == 0 puts "Fizz" else puts i end end

上記のコードのputs "Buzz"はなぜ条件式を書かずに5で割り切れる場合のBuzzを出力出来るのでしょうか??
条件式を記述している下記のコードが正しい記述ではないのでしょうか??
結果は正しくなく、buzzが出力されないですが。。
②のコード

for i in 1..100 if i % 5 == 0 if i % 3 == 0 puts "FizzBuzz" end elsif i % 5 == 0 puts "buzz" elsif i % 3 == 0 puts "fizz" else puts i end end

よろしくお願い申し上げます。。

失礼します。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

前回の質問のサンプルコードと異なり、
1も2も一般的なFizzBuzzの挙動とは間違っていますね。

なぜ条件式を書かずに5で割り切れる場合のBuzzを出力出来るのでしょうか??

5で割り切れる場合、Buzzを出力する行の上のendで終わらないからです。
これはIF文の範囲の仕様を把握すれば解決します。

ただしこれだと、3と5の公倍数のとき(15とか)、
FizzBuzzとBuzzが両方出力されてしまいますね。

結果は正しくなく、buzzが出力されないですが。。

こちらのコードはelsifの仕様の把握の問題です。

elseifが実行されるのは、前のifが実行されないときなので、
5で割り切れる場合は判定が回ってきませんし、
5で割り切れない場合は偽になるので、
結果的にbuzzの行は、出力される可能性がまったくないわけです。

何度も読み書きして、IF文の挙動を把握すれば、
見ただけで動作をイメージできるようになると思いますが、
最初は必ず正解の出力と突き合わせて確認してください。

投稿2015/07/28 06:30

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

①のコードの2行目、
if i % 5 == 0
が条件ではないでしょうか。

投稿2015/07/28 05:19

shigeo.h

総合スコア90

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

if i % 5 == 0

ruby

1if i % 3 == 0 2 puts "FizzBuzz" 3end 4puts "Buzz"

にかかっています。

そして①が一般的なFizzBuzzとして間違ってます。
iが15の倍数のとき
FizzBuzz
となるべき出力が
FizzBuzz
Buzz
になっちゃいます。

元ネタと思しきページ
「情報系の学部を出てるのにこれができない人がいるとは信じられませんね」
と自信満々に書いてあるので鵜呑みにしてしまったのでしょうか。

投稿2015/07/28 06:00

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

if-elsif-elseは分岐し、どれか1つのみを実行します
ifは分岐し、合致するなら処理を実行します。

Ruby

1 if i % 5 == 0 2 if i % 3 == 0 3 puts "FizzBuzz" 4 end 5 puts "Buzz"

ここの処理手順を理解できないからだと思います。
ここに書いてあることを1行ずつ分解して説明すると

1. i割る5の余りが0なら2へ
2.i割る3の余りが0なら3へ、そうでないならば4へ
3.puts "FizzBuzz"実行。4へ
4.puts "Buzz"実行

ついでにこっちもばらしてみると・・・

Ruby

1 if i % 5 == 0 2 if i % 3 == 0 3 puts "FizzBuzz" 4 end 5 elsif i % 5 == 0 6 puts "buzz"

1. i割る5の余りが0なら2へ、そうでないなら4へ
2.i割る3の余りが0なら3へ、そうでないならば4へ
3.puts "FizzBuzz"実行。欄外へ
4.i割る5の余りが0なら5へそうでないなら欄外へ
5.puts "Buzz"実行

1.の時点で5のあまりが0になる数字が処理されるので4の処理で割る5の処理が実行されることはふつうはないと思います。

投稿2015/07/28 05:30

tenraku

総合スコア148

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問