2016-11-24 75 views
2

我有一个脚本已启动,但正在接收一条错误消息。我通常有正确的想法,但语法或格式不正确。使用类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) 
+0

你禁止使用[Fixnum#to_s](http://ruby-doc.org//core-2.3.0/Fixnum.html#method-i-to_s)?如果不是,那就是要走的路。你的第五行应该是'n = gets.to_i'(或'n = gets.chomp.to_i')。我会重新格式化你的代码。 –

+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" 
+0

这正是我需要帮助完成这项工作。感谢一堆Cary和sagarpandy –