def longest_word(string)
words = string.split
idx = 0
while idx < words.length
if words[idx].length > words[idx + 1].length
longest = words[idx]
else
longest = words [idx + 1]
end
idx += 1
end
return longest
end
puts(longest_word("peas rambling tattoo") == "rambling")
Run Code Online (Sandbox Code Playgroud)
不断收到错误消息
longest_word.rb:5:in longest_word': undefined method
length'为nil:
来自longest_word.rb的NilClass(NoMethodError):15:in''
关于为什么会发生这种情况的任何信息都会很棒
words.length
返回元素数,但索引从0开始.
你需要一个 (words.length - 1)
def longest_word(string)
words = string.split
idx = 0
while idx < (words.length - 1)
if words[idx].length > words[idx + 1].length
longest = words[idx]
else
longest = words [idx + 1]
end
idx += 1
end
return longest
end
puts(longest_word("peas rambling tattoo") == "rambling")
Run Code Online (Sandbox Code Playgroud)
你的代码不是'rubyesk',我更喜欢:
def longest_word(string)
longest = ''
string.split.each do |word|
longest = word.length > longest.length ? word : longest
end
return longest
end
puts(longest_word("peas rambling tattoo") == "rambling")
Run Code Online (Sandbox Code Playgroud)
或者更好:
def longest_word(string)
longest = ''
string.split.each do |word|
longest = word if word.length > longest.length
end
return longest
end
puts(longest_word("peas rambling tattoo") == "rambling")
Run Code Online (Sandbox Code Playgroud)
您还可以使用max_by
更短的代码:
def longest_word(string)
string.split.max_by{|word| word.length}
end
puts(longest_word("peas rambling tattoo") == "rambling")
Run Code Online (Sandbox Code Playgroud)
甚至更短 string.split.max_by(&:length)
归档时间: |
|
查看次数: |
33 次 |
最近记录: |