使用 class 整数和多种方法将整数转换为八进制

Convert Integer to Octal using class Integer and multiple methods

我启动了一个脚本,但收到一条错误消息。我通常有正确的想法,但语法或格式不正确。

以下是给出的确切说明:
通过添加一个名为 to_oct 的方法来扩展 Integer class,其中 return 是一个表示八进制整数的字符串。我们将在 class 中讨论该算法。提示用户输入一个数字并输出由to_oct编辑的八进制字符串return。

为名为 "to_base" 的整数扩展添加另一个方法。此方法应采用一个参数,指示数字应转换为的基数。例如,要将数字 5 转换为二进制,我会调用 5.to_base(2)。这将 return “101”。假设 to_base 的输入参数是一个小于 10 的整数。to_base 应该 return 一个字符串,表示请求的数字基数中的小数。

#!/usr/bin/ruby
class Integer
  def to_base(b)
    string=""
    while n > 0
      string=(n%b)+string
      n = n/b
    end
  end
  def to_oct
    n.to_base(8)
  end
end

puts "Enter a number: "
n=gets.chomp
puts n.to_base(2)

当我 运行 脚本时,我得到了输入数字的提示,但随后我收到了这个错误消息:

tryagain.rb:16:in `<main>': undefined method `to_base' for "5":String (NoMethodError)

按照建议,做这样的事情:

class Integer
  def to_base b
    to_s b       #same as self.to_s(b)
  end

  def to_oct
    to_base 8    #same as self.to_base(8)
  end
end

 5.to_base 2 #=> "101"
65.to_oct    #=> "101"