我在HackerRank上的Ruby中练习一些编码问题,并且无法理解为什么我会得到额外的空白行。用户输入(从控制台)如下:
3
sam 99912222
tom 11122222
harry 12299933
sam
edward
harry
第一个数字告诉您需要将多少个键值对添加到电话簿哈希中。接下来的几行(由第一个数字指定)是要添加的那些键值对。其余的查询是我要搜索的键。我已经编写了所有代码,并对其进行了测试。它成功地将键值对添加到名为phoneBook的哈希中,并且当我使用给定的键在哈希中搜索时,它还会成功打印正确的值。但是,最后我得到了一个额外的空白行,我不知道为什么。下面是我的代码:
entries = []
num_entries = gets.to_i
num_entries.times do | input |
entries << gets.chomp
end
phoneBook = {}
entries.each do | entry |
str = entry.split
phoneBook[str[0]] = str[1].to_i
end
name_str = gets.chomp
while name_str != ""
if phoneBook.has_key?(name_str)
puts name_str + "=" + phoneBook[name_str].to_s
else
puts "Not found"
end
name_str = gets.chomp
end
这是我收到的错误消息:
Solution.rb:23:in `<main>': undefined method `chomp' for nil:NilClass (NoMethodError)
我知道错误可能是由于尝试在我得到的输出的空白行上执行代码而引起的,但是我认为,一旦用户输入为空,它将退出while循环。
答案 0 :(得分:1)
name_str = gets.chomp
在HackerEarth网站上,输入是从文件中读取的。当没有要从文件读取的输入时,gets返回一个nil对象。由于nil没有chomp方法(仅限于字符串之类的类),因此将引发异常。
gets.to_s.chomp
until((name_str = gets.chomp).nil?)
name_str.chomp!
# Rest of the logic
end