2016-04-22 5 views
2

Ich mache eine Aufgabe in "Learn to Program" von Chris Pine. Das Programm fragt nach der Lieblingsnummer einer Person, fügt +1 hinzu und zeigt das Ergebnis an. Ich schrieb dies:Keine implizite Konvertierung von Fixnum in String, obwohl "to_i" verwendet wird

puts 'Hello, what\' your favorite number?' 
number = gets.to_i 
puts 'Here\' a better bigger favorite number - ' + number + 1 

Und es ergibt dies:

Better_number.rb:3:in \'+\': no implicit conversion of Fixnum into String (TypeError) 

Ich habe auch versucht

number = gets.chomp.to_i 

aber das scheint nicht zu funktionieren.

+1

Was ist Ihre Frage? – sawa

+0

Hier liegst du falsch "puts" Hier ist eine bessere, größere Favoritennummer - '+ Nummer + 1 'weil'' Hier 'eine bessere, größere Lieblingsnummer -' 'ist eine Zeichenkette und' Nummer' ist Ganzzahl und kann nicht benutzt werden '+' für string und fixnum –

+0

Also was genau willst du zeigen? –

Antwort

2

Sie können einer Zeichenfolge in Ruby keine Zahl hinzufügen. Sie müssen es zu einer Zeichenfolge machen.

puts 'Hello, what\' your favorite number?' 
number = gets.to_i 
puts 'Here\' a better bigger favorite number - ' + (number + 1).to_s 
# or 
bigger_number = number + 1 
puts 'Here\' a better bigger favorite number - ' + bigger_number.to_s 
# or 
puts "Here's a better bigger favorite number - #{bigger_number}" 
+0

Got it! Jetzt geht es. Danke vielmals! – annabretsko

+0

@Brets: Vergiss nicht, hilfreiche Antworten zu akzeptieren. –

+0

@SergioTulentsev Ich denke, der Begriff "Casting" könnte hier irreführend sein. Durch den Aufruf von to_s wird ein ganz neues Objekt erzeugt, eine Zeichenkette, dh die Zeichenkette der Zahl. –

3

Versuchen:

puts "Here\' a better bigger favorite number - #{number + 1}" 

Sie können keine Zeichenfolge mit der Nummer summieren.

0

können Sie das Ihr Problem zu beheben #{"interpolation"} verwenden.

puts 'Hello, what\' your favorite number?' 
number = gets.to_i 
puts 'Here\' a better bigger favorite number - #{number + 1}'