2016-11-24 7 views
2

Ich habe ein Skript gestartet, aber eine Fehlermeldung erhalten. Ich habe normalerweise die richtige Idee, aber falsche Syntax oder Formatierung.Convert Integer zu Octal mit Klasse Integer und mehrere Methoden

Hier sind die genauen Anweisungen:
Erweitern Sie die Integer-Klasse, indem Sie eine Methode namens to_oct hinzufügen, die eine Zeichenfolge zurückgibt, die die Ganzzahl in Oktal darstellt. Wir werden den Algorithmus in der Klasse diskutieren. Fragen Sie den Benutzer nach einer Zahl und geben Sie die von to_oct zurückgegebene Oktalzeichenfolge aus.

Fügen Sie Ihrer Integer-Erweiterung "to_base" eine weitere Methode hinzu. Diese Methode sollte einen Parameter annehmen, der die Basis angibt, in die die Zahl konvertiert werden soll. Um beispielsweise die Zahl 5 in eine binäre Zahl zu konvertieren, würde ich 5.to_base (2) aufrufen. Dies würde "101" zurückgeben. Angenommen, der Eingabeparameter für to_base ist eine Ganzzahl kleiner als 10. to_base sollte eine Zeichenfolge zurückgeben, die die Dezimalzahl in der Basis der angeforderten Zahl darstellt.

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

Als ich das Skript ausführen ich tun, um die eine Reihe Aufforderung eingeben, aber dann bekomme ich diese Fehlermeldung:

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

Ist es verboten, [Fixnum # to_s] (http://ruby-doc.org//core-2.3.0/Fixnum.html#method-i-to_s) zu verwenden? Wenn nicht, ist das der richtige Weg. Ihre vorletzte Zeile sollte 'n = gets.to_i' sein (oder' n = gets.chomp.to_i'). Ich werde Ihren Code für Sie neu formatieren. –

+0

Es gab keine zusätzlichen Einschränkungen –

Antwort

0

Wie bereits angedeutet, etwas zu tun, wie folgt aus:

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

Dies ist genau das, was ich brauchte, um diese Arbeit zu machen. Danke ein paar Cary und sagarpandy –