2016-08-22 16 views
1

Odin Projectを使い、Rubyのエクササイズに取り掛かり、数字入力をして数字の飛行機の英語バージョン。 (ライン32)以下の太字部分を参照するエラーを取得する"+":nilをStringに暗黙的に変換しない(TypeError) "Rubyのエラー

def englishNumber number 
    if number < 0 # No negative numbers. 
    return 'Please enter a number that isn\'t negative.' 
    end 
    if number == 0 
    return 'zero' 
    end 

    numString = '' # This is the string we will return. 

    onesPlace = ['one',  'two',  'three', 'four',  'five', 
       'six',  'seven',  'eight', 'nine'] 
    tensPlace = ['ten',  'twenty', 'thirty', 'forty', 'fifty', 
       'sixty', 'seventy', 'eighty', 'ninety'] 
    teenagers = ['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 
       'sixteen', 'seventeen', 'eighteen', 'nineteen'] 


    left = number 
    write = left/10000   
    left = left - write*10000 

    if write > 0 

    if ((write == 1) and (left > 0)) 
     **numString = numString + teenagers[left-1] + ' thousand'** 

     left = 0 
    else 
     numString = numString + tensPlace[write-1] + ' thousand' 


    if left > 0 
     numString = numString + '-' 
    end 
    end 

    write = left/1000   
    left = left - write*1000 

    if write > 0 


     if left > 0 
     numString = numString + ' ' 
     end 
    end 

    write = left/100   
    left = left - write*100 

    if write > 0 


    if left > 0 
     numString = numString + ' ' 
    end 
    end 

    write = left/10   
    left = left - write*10 

    if write > 0 
    if ((write == 1) and (left > 0)) 

     left = 0 
    else 
     numString = numString + tensPlace[write-1] 
     # The "-1" is because tensPlace[3] is 'forty', not 'thirty'. 
    end 

    if left > 0 
     numString = numString + '-' 
    end 
    end 

    write = left 
    left = 0  

    if write > 0 
    numString = numString + onesPlace[write-1] 
    # The "-1" is because onesPlace[3] is 'four', not 'three'. 
    end 

    # Now we just return "numString"... 
    numString 
end 

puts englishNumber 10100 
+0

最初の条件 'write> 0'には' if-else'がありますが 'end'はありません – zishe

答えて

0

問題文teenagers[left-1]です。入力10100については、

left = 100およびteenagers[100-1] = teenagers[99] = nilのようになります。

文字列をnilオブジェクトに連結することはできません。これをいくつかの方法で解決できます。

一つの方法は、値がこのプログラムを実行する場合は、あなたのためにten thousand-を見ることができるはずnil

ない場合は、最後の式はtrueになります

if ((write == 1) and (left > 0) and teenagers[left-1]) 

であなたの状態を交換することです入力10100。さて、あなたのアルゴリズムの上で、入力にhundredsの数を返すようにしましょう。

あなたはまた、if write > 0

if .. elseブロックの後endが欠落しているが、この情報がお役に立てば幸い!

+0

ありがとうございました。これは –

+0

@AndrewDavisonが答えてくれます – uday

関連する問題