Я получил ошибку "to_s": неверное количество аргументов (дано 1, ожидается 0) и как я могу улучшить свой "код"? - PullRequest
0 голосов
/ 29 ноября 2018
class Converting_numbers
  def con

    print "Enter decimal number to convert: "
    x = gets.chomp

    print <<-EOF
    1. Binary
    2. Eight
    3. Hexadecimal
    EOF

    print "Choose the notation to convert: "
    sys = gets.chomp.to_s

    if "1" === sys
      puts x = x.to_s(2)
    elsif "2" === sys
      puts x = x.to_s(8)
    elsif "3" === sys
      puts x = x.to_s(16)
    else
      puts "Wrong input! "  
    end 

  end
end

number = Converting_numbers.new
number.con

Почему возникла такая ошибка?Может кто-нибудь объяснить?Что мне нужно изменить в моем коде, чтобы сделать его лучше?Должен ли я использовать случай?Или что-то еще, несмотря на «если»?Благодаря.

Ответы [ 2 ]

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

Ваша проблема в том, что ваш x = gets.chomp является строкой.

И вы пытаетесь снова преобразовать его в строку: x.to_s(2).

Но если вы прочитаете документацию Метод String .to_s не имеет аргументов и возвращает self.

Но метод Fixnum .to_s имеет аргумент.Так что вы можете прочитать это здесь .И он конвертирует число в выбранную систему.Результат - String.

Таким образом, ваш код будет работать:

print "Enter decimal number to convert: "
x = gets.to_i
sys = nil

until (1..3).include?(sys)
  print "Select numeral system. 1. Binary. 2. Octal. 3. Hexadecimal. "
  sys = gets.to_i
end

if sys == 1
  y = x.to_s(2)
  s = "binary"
elsif sys == 2
  y = x.to_s(8)
  s = "octal"
else
  y = x.to_s(16)
  s = "hexadecimal"
end

puts "#{x} in #{s} system is #{y}."

Кстати, ваша sys = gets.chomp.to_s не очень хорошая идея, sys = gets.chomp достаточно.

Надеюсь, это помогло вам.И я проголосовал за твой вопрос.Я тоже новичок.Но я думаю, что этот сайт предназначен для того, чтобы помогать другим людям, а не для того, чтобы обсуждать вопросы

0 голосов
/ 29 ноября 2018

Аргумент, который вы передаете to_s, доступен только для экземпляра Integer.Однако, поскольку вы вводите String, вам сначала нужно преобразовать его в Integer.

, например x.to_i.to_s(2)

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