我正在尝试编写一个接收字符串并输出该字符串中最长字的程序。现在,我知道我的代码看起来很毛茸茸,但我对Ruby语言很陌生,所以请耐心等待。我不明白有关这个问题的任何其他解释。我不是在寻找答案。我想要的只是一个善良的人,请向我解释为什么我的程序在第16行停止,问题标题中说明了这个问题。拜托,谢谢!
# longest_word.rb
# A method that takes in a string and returns the longest word
# in the string. Assume that the string contains only
# letters and spaces. I have used the String 'split' method to
# aid me in my quest. Difficulty: easy.
def longest_word(sentence)
array = sentence.split(" ")
idx = 0
ordered_array = []
puts(array.length)
while idx <= array.length
if (array[idx].length) < (array[idx + 1].length)
short_word = array[idx]
ordered_array.push(short_word)
idx += 1
elsif array[idx].length > array[idx + 1].length
long_word = array[idx]
ordered_array.unshift(long_word)
idx += 1
else l_w = ordered_array[0]
return l_w
end
end
end
puts("\nTests for #longest_word")
puts(longest_word("hi hello goodbye"))
答案 0 :(得分:0)
在while循环中的某个时刻,您将进入idx指向数组中最后一项的状态。那时,要求array[idx+1]
返回nil,而NilClass没有方法'length'
简单的修复方法是更改while循环条件,以便idx+1
始终在数组中。
答案 1 :(得分:0)
我可以推荐一个更短的解决方案。
words1= "This is a sentence." # The sentence
words2 = words1.split(/\W+/) # splits the words by via the space character
words3 = words2.sort_by {|x| x.length} #sort the array
words3[-1] #gets the last word
或
def longest_word(sentence)
sentence.split(/\W+/).sort_by {|x| x.length}[-1]
end