2016-11-24 7 views
2

スクリプトを開始しましたが、エラーメッセージが表示されます。私は通常、正しいアイデアを持っていますが、構文やフォーマットが正しくありません。クラス整数と複数のメソッドを使用して整数を8進数に変換します

ここには正確な指示があります。
to_octというメソッドを追加してIntegerクラスを拡張し、整数を表す文字列を8進数で返します。アルゴリズムをクラスで説明します。ユーザーに番号を入力させ、to_octが返す8進数の文字列を出力します。

"to_base"という名前のInteger拡張に別のメソッドを追加します。このメソッドは、数値を変換する基数を示すパラメータを取る必要があります。たとえば、5を2進数に変換するには、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 –

関連する問題