Ввод строки с использованием (gets.chomp) и создание гистограммы - PullRequest
0 голосов
/ 31 декабря 2018

У меня проблемы с пониманием рубина.Я хотел бы иметь программу, в которой пользователь может ввести набор текста, и он возвращается со звездочками.До сих пор я был в состоянии сделать это через файл .txt.Кто-нибудь может объяснить, где я ошибся?Я много борюсь с рубином.

Изображение результата при запуске

print "Please enter any length of text:"
user_input = String(gets.chomp)
h = Hash.new
f = user_input
f.each_line { |line|
  letters = line.split(//)
  letters.each { |w|
    if h.has_key?(w)
      h[w] = h[w] + 1
    else
      h[w] = 1
    end
  }
}

# sort the hash by
h.sort{|a,b| a[1]<=>b[1]}.each { |elem|
  puts "\"#{elem[0]}\": " + '*' * elem[1]
}


Сообщение об ошибке, с которым я столкнулся

Undefined method `chomp' for nil:NilClass (NoMethodError)

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Метод gets должен вызываться один.Попробуйте это во второй строке:

user_input = gets.chomp

без String.

Я надеюсь, что это полезно для вас.:)

0 голосов
/ 02 января 2019

Ваш код работает как задумано.Вы ошиблись, запустив код в текстовом редакторе, а не через консоль.Метод Kernal#gets требует пользовательского ввода, который должен быть mocked для запуска в вашем текстовом редакторе.Поскольку ваш редактор возвращает nil вместо пользовательского ввода в строковом формате, метод chomp повышает ваш NoMethodError.

По сути, ваш код в порядке, но вы пытаетесь запустить его в ограниченной среде.Для новичка, если ваш код требует ввода пользователя, проще протестировать код, запустив ваш файл ruby ​​через консоль / терминал с помощью ruby <filename.rb>.

0 голосов
/ 31 декабря 2018

В средстве запуска сценариев Atom, где вы в настоящий момент запускаете свою программу Ruby, вы не можете читать со стандартного ввода, используя gets.Похоже, что пакет *1003* * script-runner может расширить это, чтобы обеспечить реальный терминал для скрипта, где вы также можете использовать STDIN.

В качестве альтернативы, вы также можете запустить свою программу из реальногоприставка.Для этого вы запустили его из окна командной строки, например, с помощью ruby name_of_program.rb вместо запуска из Atom.

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