2016-07-18 55 views
0

FizzBu​​zz,一個經典的問題,返回所有數字高達N輕微扭曲。如果一個數字可以被3整除,它將被替換爲「fizz」。如果它可以被5整除,它將被替換爲「嗡嗡聲」。Ruby FizzBu​​zz使用數組,我的邏輯似乎是正確的,但它得到一個錯誤

comparison of Fixnum with nil failed 

有人能解釋這個錯誤信息給我聽聽:如果是整除雙方,它與「fizzbuzz」

我不斷收到此錯誤信息取代?此外,爲什麼代碼無法正常工作?

def fizz_buzz(n) 
    arr = (1..n).to_a 
    i = 0 

    while arr[i] < arr[n] 
    if i % 3 == 0 && i % 5 == 0 
     arr[i] = 'fizzbuzz' 
    elsif i % 3 == 0 
     arr[i] = 'fizz' 
    elsif i % 5 == 0 
     arr[i] = 'buzz' 
    else 
     arr[i] = i 
     i += 1 
    end 
    end 

    return arr 
end 

fizz_buzz(12) 

回答

3

你的條件,只是有點過了,試試這個:

def fizz_buzz(n) 
    arr = (1..n).to_a 
    i = 0 

    while i < n 
    if arr[i] % 3 == 0 && arr[i] % 5 == 0 
     arr[i] = 'fizzbuzz' 
    elsif arr[i] % 3 == 0 
     arr[i] = 'fizz' 
    elsif arr[i] % 5 == 0 
     arr[i] = 'buzz' 
    end 

    i+=1 
    end 

    return arr 
end 

嘗試訪問ARR [N]讓你這紅寶石返回nil數組的邊界之外。

+0

哦!非常感謝你! :D – GothamQueen

1

@布拉德 - 梅蘭遜教授打我直進回答你的問題,所以我將分享其使用一些常見的Ruby成語(通過一系列的Array構造和map),它簡化了事情的答案,防止您不必做任何迭代簿記和防止關閉的情況的一個錯誤的可能性,外的界失誤等

def fizz_buzz(n) 
    Array(1..12).map do |n| 
    if n % 3 == 0 && n % 5 == 0 
     'fizzbuzz' 
    elsif n % 3 == 0 
     'fizz' 
    elsif n % 5 == 0 
     'buzz' 
    else 
     n 
    end 
    end 
end 

result = fizz_buzz 12 
# result => [1, 2, "fizz", 4, "buzz", "fizz", 7, 8, "fizz", "buzz", 11, "fizz"] 
0

您可以更新代碼的紅寶石方式,通過使用塊和警衛,我不記得上次我在ruby中使用了一個while循環:)

另外,​​接受一個塊作爲可以利用來建立您的陣列在單個步驟中的參數:

def fizz_buzz(n) 
    Array.new(n) do |index| 
    x = index + 1 
    case 
     when x % 3 == 0 && x % 5 == 0 then "fizzbuzz" 
     when x % 3 == 0 then "fizz" 
     when x % 5 == 0 then "buzz" 
     else x 
    end 
    end 
end 

通知我用1作爲基本索引,而不是0,可以只除去X =指數+ 1和替換X索引有它在零指數的基礎

與塊的代替while循環中的溶液的工作,和警衛

def fizz_buzz(n) 
    arr = (1..n).to_a 

    0.upto(n - 1) do |i| 
    arr[i] = "fizzbuzz" and next if i % 3 == 0 && i % 5 == 0 
    arr[i] = "fizz" and next if i % 3 == 0 
    arr[i] = "buzz" if i % 5 == 0 
    end 

    arr 
end 
+0

你的第二個解決方案不起作用。例如'fizz_buzz(4)#=> [「fizzbuzz」,2,3,「fizz」]' –

相關問題