Почему после печати выводится дополнительная пустая строка? - PullRequest
0 голосов
/ 24 сентября 2019

Я практикую некоторые вопросы кодирования в Ruby на HackerRank, и у меня возникают проблемы с пониманием, почему я получаю дополнительную пустую строку вывода.Пользовательский ввод (с консоли) выглядит следующим образом:

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 Ответ

1 голос
/ 24 сентября 2019
name_str = gets.chomp

На веб-сайте HackerEarth вход считывается из файла.Когда нет входных данных для чтения из файла, get возвращает нулевой объект.Поскольку nil не имеет метода chomp (ограничен классами, такими как string), генерируется исключение.

  1. Быстрое исправление кода может быть методом to_s после оператора gets.
gets.to_s.chomp
Лучше исправить, IMO будет читать входные данные, пока не будет получен ноль.
until((name_str = gets.chomp).nil?)
  name_str.chomp!
  # Rest of the logic
end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...