Ruby
1# encoding: utf-8
2
3def fizzbuzz(n)
4 return 'FizzBuzz' if (n % 15).zero?
5 return 'Buzz' if (n % 5).zero?
6 return 'Fizz' if (n % 3).zero?
7 n
8end
9
10100.times do |x|
11 puts fizzbuzz(x + 1)
12end
13
Ruby
1# encoding : utf-8
2
31.upto(100) { |x|puts (x % 15).zero? ? 'FizzBuzz' : (x % 5).zero? ? 'Buzz' : (x % 3).zero? ? 'Fizz' : x }
4
考えてみました。
質問者様のコードを動くように変更。
Ruby
1class Multiper
2 def Fifteen(n)
3 (n%15) == 0
4 end
5
6 def Three(n)
7 (n%3) == 0
8 end
9
10 def Five(n)
11 (n%5) == 0
12 end
13
14 Fifteen = 15
15 Three = 3
16 Five = 5
17
18 def initialize
19 1.step(100) do |count|
20 puts case
21 when Fifteen(count)
22 "fizzBuzz"
23 when Three(count)
24 "Fizz"
25 when Five(count)
26 "Buzz"
27 else
28 count
29 end
30 end
31 end
32end
33
34Multiper.new
変更点
1.1.step(100) do |count|にendがなかったので追加。
2.initializeメソッドを追加。
3.caseにあったcountを削除。
4.Fifteenメソッドなどに引数を渡すように変更。
無くても問題がないもの
Fifteen = 15
Three = 3
Five = 5
#追記
Ruby
1class Multiper
2 1.step(100) do |count|
3 puts case
4 when (count % 15).zero?
5 "fizzBuzz"
6 when (count % 3).zero?
7 "Fizz"
8 when (count % 5).zero?
9 "Buzz"
10 else
11 count
12 end
13 end
14end
15
16Multiper.new
このように書けばinitializeメソッドに
1.step(100) do |count|以下を入れなくても
大丈夫みたいです。
このように書かないでFifteenメソッドなどを
利用した場合は実行時期の関係でエラーが発生する
ようです。
参考
Rubyでクラス宣言直下に書かれたメソッドの実行時期
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/17 11:19