使用类Integer和多种方法将{1}转换为Octal

时间:2016-11-24 00:42:35

标签: ruby class methods integer octal

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

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

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

#!/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)

1 个答案:

答案 0 :(得分:0)

根据建议,做一下这样的事情:

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"