2016-08-22 2 views
1

Odin Project를 진행하면서 숫자 입력을 받아서 침을 뱉어내는 Ruby 연습을 계속했습니다. 숫자의 비행기 영어 버전. (라인 32) 아래의 굵은 부분을 참조하여 오류를 얻는 것은"+": String에 nil을 암시 적으로 변환하지 않음 (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

없는 경우 마지막 표현이 사실이 될 것이다

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

하여 조건을 대체하는 것입니다 입력 10100. 이제 입력에 hundreds의 수를 반환하도록 알고리즘에 대해 작업하십시오.

당신은이는 데 도움이 endif .. else 블록

if write > 0 내부 희망을 놓치고있어!

+0

감사합니다.이 작업은 –

+0

@AndrewDavison이 대답으로 표시해줍니다. – uday

관련 문제