2016-04-19 16 views
0

Hier ist eine Übungsfrage - Schreiben Sie eine Methode, die einige Minuten in Anspruch nimmt, und gibt eine Zeichenfolge zurück, die die Zahl in hours:minutes formatiert.Warum funktioniert dieser Ruby-Code nicht?

def time_conversion(minutes) 
    hours = minutes/60 
    mins = minutes % 60 
    time = hours + ":" + mins 
    return time 
end 

Die folgenden sind Tests, um zu sehen, ob das funktioniert. Wenn sie wahr zurückgeben, bedeutet dies, dass mein Code korrekt funktioniert.

puts('time_conversion(15) == "0:15": ' + (time_conversion(15) == '0:15').to_s) 
puts('time_conversion(150) == "2:30": ' + (time_conversion(150) == '2:30').to_s) 
puts('time_conversion(360) == "6:00": ' + (time_conversion(360) == '6:00').to_s) 

manchmal bekomme ich gilt für die ersten beiden Tests, aber die dritte Testlinie zeigt falsch, obwohl der Code genau auszudrucken das erforderlich.

anderes Mal bekomme ich folgende Fehlermeldung:

String kann nicht in Fixnum umgewandelt werden (ers): 4: in +' (repl):4:in time_conversion '(ers): 1: in `initialisieren'

bitte helfen .

+1

Sie können einer Zeichenfolge keine Zahl hinzufügen. Führen Sie 'irb' aus und geben Sie' 5 + 'foo'' ein, und Sie erhalten denselben Fehler. Versuchen Sie 'time = hours.to_s + ':' + mins.to_s' in Ihrer' time_conversion' Funktion. Oder ersetzen Sie einfach den gesamten Funktionsinhalt durch 'return '# {minutes/60}: # {minutes% 60}" ' – lurker

+0

wow. Das hat den Trick gemacht. Ich habe die Hashes nicht benutzt, aber das ist interessant. Ich nehme an, dass ich die Mins- und Stundenvariable entfernen kann – hac13

+0

Ja, Sie könnten diese Variablen entfernen. Sie sollten "Ruby String Formatierung" nachschlagen, wenn Sie führende Nullen in Ihren Minuten haben möchten, wie '6: 05'. Deine 'time_conversion' erstellt nicht' 6: 00'. Es wird '6: 0' erstellt. – lurker

Antwort

0

Da Fixnum#+ ein Numeral Argument, kein String.

+1

meine erste Frage hier und ich bekam eine super schnelle Antwort. Danke! – hac13

1

Der Fehler bezieht sich hauptsächlich auf dieser Linie time = hours + ":" + mins

hours & minsFixnum sind, wohingegen ":" ist String Da die Fehlermeldung anzeigt, "String nicht in Fixnum gezwungen werden".

Sie können entweder time = hours.to_s + ":" + minutes.to_s oder time = "#{hours}:#{minutes}" tun.

+0

Yup, lurker wies mich auf dasselbe. Ich mag den letzten Vorschlag dort. es ist nett und prägnant danke! – hac13

+0

danke für den upvote ,, eigentlich mein erster ans Stackoverflow! – linY

+0

das ist cool. Wir sehen uns auf der anderen Seite, wenn ich selbst renne – hac13

Verwandte Themen