打印输出后,为什么还有多余的空行?

时间:2019-09-24 17:12:42

标签: ruby input hash

我在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循环。

1 个答案:

答案 0 :(得分:1)

name_str = gets.chomp

在HackerEarth网站上,输入是从文件中读取的。当没有要从文件读取的输入时,gets返回一个nil对象。由于nil没有chomp方法(仅限于字符串之类的类),因此将引发异常。

  1. 对代码的快速修复可以是gets语句之后的to_s方法。
gets.to_s.chomp
  1. 更好的解决方法是,IMO将读取输入内容,直到收到零为止。
until((name_str = gets.chomp).nil?)
  name_str.chomp!
  # Rest of the logic
end