2016-09-04 2 views
0

코드에 오류가있어서 그 이유를 모르겠습니다. 문자열에서 가장 긴 단어를 반환하는 함수를 만들려고합니다. 사용할 수있는 내장 루비 메서드는 .split뿐입니다. 내 코드가 아래에 있으며 오류가 그 아래에 있습니다. 이 문제를 이해하는 데 도움이 될 것입니다..length 메서드가있는 Ruby 오류

미리 감사드립니다. 아래

def longest_word(sentence) 
    sentence1 = sentence.split 
    longest_word = "" 

for i in 0...sentence1.length 
    if i.length > longest_word.length 
     longest_word = i 
    end 
end 
return longest_word 
end 

longest_word("one three") 

오류 :

undefined method `length' for 0:Fixnum 
(repl):15:in `block in longest_word' 
(repl):14:in `times' 
(repl):14:in `longest_word' 
(repl):29:in `<main>' 

답변

2

문제 당신이 당신의 인수로 "one three"을 통과 할 때 정수 0, 1, 2을 반복하고 있다는 점이다.

length 메서드는 integer/fixnum i에서 직접 호출 할 수 없습니다. 대신, sentence1 배열의 인덱스 i에있는 요소에서 호출하려고합니다.

이런 식으로 뭔가 당신을 위해 작동한다 : 또는 더 나은 아직

def longest_word(sentence) 
    sentence.split.max_by(&:length) 
end 

(https://stackoverflow.com/a/21977468/716039에서 도난)

def longest_word(sentence) 
    sentence1 = sentence.split 
    longest_word = "" 

    for i in 0...(sentence1.length - 1) 
    if sentence1[i].length > longest_word.length 
     longest_word = sentence1[i] 
    end 
    end 
    return longest_word 
end 

+0

나를 설명 해주셔서 고맙습니다. –

1

sentence.length가 배열을 반환하기 때문에 당신은 오류가됩니다 당신은 Fixnum 길이를 확인하고 i.length하고 있습니다. 코드를 아래로 변경하십시오.

def longest_word(sentence) 
    sentence1 = sentence.split 
    longest_word = "" 

    sentence1.each do |word| 
    longest_word = word if word.length > longest_word.length 
    end 
    return longest_word 
end 

longest_word("one three") 
+0

명시 적으로'return'을 할 필요가없고 들여 쓰기가 엉망이되지만 'each'를 사용하면 커다란 개선이됩니다. – tadman

+0

'if'문을 하나의 라이너로 다시 작성할 수도 있습니다. 'longest_word = word word.length> longest_word.length' – davidhu2000

+0

도움과 정보를 제공해 주셔서 감사합니다! 정말 감사. –

관련 문제