2016-02-14 2 views
-2

Может кто-нибудь объяснить, почему следующий код не работает должным образом? Он возвращает только «fizzbuzz» 100 раз в ответ. Спасибо.Код для "fizzbuzz" не работает. Только «fizzbuzz» несколько раз возвращался

def fizzbuzz(number) 
    idx = 0 
    while idx <= number 
    num = number[idx] 
    if num % 3 == 0 && num % 5 == 0 
     puts 'fizzbuzz' 
    elsif num % 5 == 0 
     puts 'buzz' 
    elsif num % 3 == 0 
     puts 'fizz' 
    else 
     puts num 
    end 
    idx += 1 
    end 
end 

fizzbuzz(100) 
+0

Я не понимал, что для 'Fixnum' есть индексный оператор. Очень круто! Http://ruby-doc.org/core- 2.2.3/Fixnum.html # method-i-5B-5D –

+0

'num = number [idx]' что это значит? Он вообще не имеет смысла – ImranNaqvi

+0

Я использую «number [idx]» в качестве передающей переменной. Я назначил его «num». Я не понял, что должен использовать idx в качестве передающей переменной. – Asfand

ответ

1

У вас есть две проблемы здесь:

  1. num = number[idx]
  2. idx переменная является тот, который следует использовать для проверки не num:

    def fizzbuzz(number) 
        idx = 0 
        while idx <= number 
        if idx % 3 == 0 && idx % 5 == 0 
         puts 'fizzbuzz' 
        elsif idx % 5 == 0 
         puts 'buzz' 
        elsif idx % 3 == 0 
         puts 'fizz' 
        else 
         puts idx 
        end 
        idx += 1 
        end 
    end 
    
    fizzbuzz(100) 
    

Вышеприведенное i ваше решение.

Причина не всегда печати 'fizzbuzz', независимо от того, какое число вы передаете методу fizzbuzz, потому что вы назначаете number[idx] к локальной переменной num, где вы должны использовать idx счетчик в ваших условных операторах.

Вам необходимо напечатать цифры от 1 до номера, который вы передаете, до fizzbuzz. Для кратных 3 напечатать «Fizz» вместо номера и для кратных 5 напечатать «Buzz». Для чисел, кратных как 3, так и 5, напечатайте «FizzBuzz».

+0

" потому что вы являетесь номером [idx] для локальной переменной num. Номер возвращаемого значения [idx] равен 0 " –

+0

. Исправлено. Спасибо за это – Cyzanfar

+0

. Возвращаемое значение числа [idx] на самом деле не всегда 0. 100 [2] например: 1. http://ruby-doc.org /core-2.2.3/Fixnum.html#method-i-5B-5D –