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

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

ただいまの
回答率

87.48%

(超初心者)RubyでFizzBuzz問題が解けません

解決済

回答 5

投稿

  • 評価
  • クリップ 1
  • VIEW 1,660

score 14

RubyでFizzBuzz問題を解こうとしています。
書いた結果がこれです

i = 1
while i < 50
  puts i
  i = i + 1
  if i % 15 == 0
    puts "FizzBuzz"
  elsif i % 3 == 0
    puts "Fizz"
  elsif i % 5 == 0
    puts "Buzz"
end

コード


これのどういう所が間違っていますかね?

ご指導くださいー

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • javahack

    2019/03/30 03:13

    何が問題なのか明確にしてください。
    1.動作しない
    2.動作するが期待した結果が出力されない

    2.の場合、期待している結果と実際に出力されている結果を質問文に追記してください。

    キャンセル

回答 5

+4

3の倍数でも5の倍数でも無いときだけ、数字を表示するのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/30 22:54

    なるほど、その考えはありませんでした!回答ありがとうございます!

    キャンセル

  • 2019/03/31 01:13

    > その考えはありませんでした!

    FizzBuzz問題とは何であるかを誤解していたと言うこと??

    キャンセル

  • 2019/03/31 02:17

    はい、そうです。

    キャンセル

checkベストアンサー

+2

これのどういう所が間違っていますかね? 

エラーが出ているはずなので、それを手がかりに解決するのが良いです。
本件では構文が間違っているので、該当箇所を修正すると現状のコードでも記述したとおりに動くようになります。

*見慣れた FizzBuzz の出力とは異なるので、個人的にはロジックも見直したほうが良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/30 22:40

    回答ありがとうございます!コードを見直して色々いじってやってみます!

    キャンセル

+2

... どういう所が間違っていますか ...

質問文のコードを実行させた結果はこんなふうになります。
イメージ説明

こんな風に変更しては?
x.rb

i = 1
while i < 50
  if i % 15 == 0
    puts "FizzBuzz"
  elsif i % 3 == 0
    puts "Fizz"
  elsif i % 5 == 0
    puts "Buzz"
  else
    puts i
  end
  i = i + 1
end

実行例
イメージ説明

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/30 10:01

    マイナス評価の理由コメントに書いてほしいです。

    キャンセル

  • 2019/03/30 22:51

    すごいです!私の書きたいコードそのものです!回答ありがとうございます!あなたの回答をベストアンサーにしたかったのですが、間違えて違う人の回答をベストアンサーにしてしまいました。ごめんなさい~

    キャンセル

  • 2019/03/31 07:30

    ベストアンサーは付け替えられるので、付け替えれば良い。

    キャンセル

+2

1行で書いてみるとか

puts [*1..15].map{|x| (x % 15).zero? ? :FizzBuzz : (x % 3).zero? ? :Fizz : (x % 5).zero? ? :Buzz :x}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/30 22:44

    超初心者の私にはこのコードがまったく分からないので分かるまでじっくり見てみます!回答ありがとございます!

    キャンセル

  • 2019/03/30 22:46

    puts [*1..15]で1から15まで配列展開して後はmapでって感じです。

    キャンセル

+1

実はFizzBuzzってのは誰かが先日作った問題ではないのです。
英語圏では有名なゲームが元になっているのです。
Wikipediaの記事(日本語)もちゃんと用意されています。
https://ja.wikipedia.org/wiki/Fizz_Buzz

Fizz Buzz(フィズ・バズ、Bizz BuzzやBuzzとも呼ばれる)は英語圏で長距離ドライブ中や飲み会の時に行われる言葉遊びである。

元々は山手線ゲームのような会話で遊ぶゲームだったんですね、

プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。
ただし、3で割り切れる場合は「Fizz」(Bizz Buzzの場合は「Bizz」)、5で割り切れる場合は「Buzz」、両者で割り切れる場合(すなわち15で割り切れる場合)は「Fizz Buzz」(Bizz Buzzの場合は「Bizz Buzz」)を数の代わりに発言しなければならない。
発言を間違えた者や、ためらった者は脱落となる。

なんだか世界のナベアツの「3の倍数と3が付く数字のときだけアホになります」のネタみたいですね。
実はFizzBuzzの前提があってそれをネタにしたものだったのです。


さて、プログラミング言語というのは殆どが英語圏発祥であり、
それによる遊びというのが日本に輸入されるという形でやってくる事が多く、
一般人には馴染みの薄いFizzBuzzも輸入されてやってきたものです。

(まぁRubyは日本人のmatzが作った国産の言語ですが、FizzBuzzはC言語の時代からあるし)

ゲームは、以下のとおりに発言が進行する。

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, Fizz Buzz, 31, 32, Fizz, 34, Buzz, Fizz, ...

これが質問文の勘違いになります。
ちゃんと元ネタを知ってれば勘違いすることはないので、次はもう大丈夫ですよね?


期待する出力フォーマットは、
下記のように改行コードを挟んで出力するルールが一般的ですかね。

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る