我已经尝试创建一个程序,它将接受字符串,然后按字母顺序对它们进行排序,但是我已经遇到了一个我无法用我当前的水平理解的情况。 如果我运行没有if分支的代码,那么事情就好了;但是我这样做的那一刻:
junk.rb:20:
<main>': undefined method
ord&#39;为零:NilClass (NoMethodError)
如果我删除了ord
方法,我会收到split
代替&#34; ord&#34;在返回的消息中。
有谁知道问题是什么?
CODE:
words = []
cWords = nil
x = 0
y = 0
while (cWords != "")
cWords = gets.chomp
words[x] = cWords
x = x + 1
end
x = 0
while (y < 200) #arbitrary limit at the moment
if (words[x].split("")[0].ord == y)
puts words[x]
end
y = y + 1
x = x + 1
end
答案 0 :(得分:0)
第一个while
循环一旦到达空字符串就会终止(但仍会将其附加到列表中),这意味着words
的最后一个元素是一个空字符串。将空字符串拆分为自身时,会得到一个空数组。
"".split("") #=> []
"".split("")[0] #=> nil
您最终会在第二个循环中触及此点,并在.ord
上调用nil
。您可以通过不将空字符串作为words
数组的一部分来避免这种情况。