Newbie problem: String can't be coerced into Fixnum

Discussion in 'Ruby' started by Ja Bo, Dec 27, 2006.

  1. Ja Bo

    Ja Bo Guest

    I am brand new to Ruby and I would greatly appreciate any help you guys
    can provide!

    If this is not the correct place to post them please let me know where I
    should post these types of questions.

    This very short program is just supposed to take today's date using t =
    Time.now and calculating what year the user was born...

    Code:
    puts "How old are you?"
    age = gets.chomp

    puts name + " is " + age + " years old."

    t = Time.now
    born = t.year - age

    puts "You were probably born in " + born + "."


    Thank you!!!

    --
    Posted via http://www.ruby-forum.com/.
    Ja Bo, Dec 27, 2006
    #1
    1. Advertising

  2. Ja Bo

    Jon Garvin Guest

    You need to convert the age string to a number. If you're coming from
    Perl, you're used to this being done for you magically. Ruby expects
    you to do it. Try this...

    born = t.year - age.to_i



    Ja Bo wrote:
    > I am brand new to Ruby and I would greatly appreciate any help you guys
    > can provide!
    >
    > If this is not the correct place to post them please let me know where I
    > should post these types of questions.
    >
    > This very short program is just supposed to take today's date using t =
    > Time.now and calculating what year the user was born...
    >
    > Code:
    > puts "How old are you?"
    > age = gets.chomp
    >
    > puts name + " is " + age + " years old."
    >
    > t = Time.now
    > born = t.year - age
    >
    > puts "You were probably born in " + born + "."
    >
    >
    > Thank you!!!
    >
    >
    Jon Garvin, Dec 27, 2006
    #2
    1. Advertising

  3. Ja Bo

    Guest

    Hi --

    On Thu, 28 Dec 2006, Ja Bo wrote:

    > I am brand new to Ruby and I would greatly appreciate any help you guys
    > can provide!
    >
    > If this is not the correct place to post them please let me know where I
    > should post these types of questions.
    >
    > This very short program is just supposed to take today's date using t =
    > Time.now and calculating what year the user was born...
    >
    > Code:
    > puts "How old are you?"
    > age = gets.chomp
    >
    > puts name + " is " + age + " years old."
    >
    > t = Time.now
    > born = t.year - age


    The problem there is that t.year is an integer and age is a string.
    You need to convert age:

    born = t.year - age.to_i # to_i is "to integer"

    > puts "You were probably born in " + born + "."


    And don't forget you can use string interpolation:

    puts "You were probably born in #{born}."

    Or even do it all at once:

    puts "You were probably born in #{Time.now.year - age.to_i}."

    :)


    David

    --
    Q. What is THE Ruby book for Rails developers?
    A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black)
    (See what readers are saying! http://www.rubypal.com/r4rrevs.pdf)
    Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
    A. Ruby Power and Light, LLC (http://www.rubypal.com)
    , Dec 27, 2006
    #3
  4. Ja Bo

    Guest

    Hi --

    On Thu, 28 Dec 2006, wrote:

    > Hi --
    >
    > On Thu, 28 Dec 2006, Ja Bo wrote:
    >
    >> I am brand new to Ruby and I would greatly appreciate any help you guys
    >> can provide!
    >>
    >> If this is not the correct place to post them please let me know where I
    >> should post these types of questions.
    >>
    >> This very short program is just supposed to take today's date using t =
    >> Time.now and calculating what year the user was born...
    >>
    >> Code:
    >> puts "How old are you?"
    >> age = gets.chomp
    >>
    >> puts name + " is " + age + " years old."
    >>
    >> t = Time.now
    >> born = t.year - age

    >
    > The problem there is that t.year is an integer and age is a string.
    > You need to convert age:
    >
    > born = t.year - age.to_i # to_i is "to integer"
    >
    >> puts "You were probably born in " + born + "."

    >
    > And don't forget you can use string interpolation:
    >
    > puts "You were probably born in #{born}."
    >
    > Or even do it all at once:
    >
    > puts "You were probably born in #{Time.now.year - age.to_i}."
    >
    > :)


    And, as the other responses reminded me, if you do it the way you
    were, you have to convert born to a string:

    puts "You were probably born in " + born.to_s + "."

    With string interpolation, you don't; the interpolation automatically
    does the conversion.


    David

    --
    Q. What is THE Ruby book for Rails developers?
    A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black)
    (See what readers are saying! http://www.rubypal.com/r4rrevs.pdf)
    Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
    A. Ruby Power and Light, LLC (http://www.rubypal.com)
    , Dec 27, 2006
    #4
  5. Ja Bo

    Cesar Rabak Guest

    Ja Bo escreveu:
    > I am brand new to Ruby and I would greatly appreciate any help you guys
    > can provide!
    >
    > If this is not the correct place to post them please let me know where I
    > should post these types of questions.
    >
    > This very short program is just supposed to take today's date using t =
    > Time.now and calculating what year the user was born...
    >
    > Code:
    > puts "How old are you?"
    > age = gets.chomp
    >
    > puts name + " is " + age + " years old."
    >
    > t = Time.now
    > born = t.year - age
    >
    > puts "You were probably born in " + born + "."
    >
    >

    You already got a lot of help from the Ruby interpreter. For grasping
    the meaning of the error message, go to the "Pragmatic Programmer's
    Guide" in Standard Types and search about the method #to_i.

    HTH

    --
    Cesar Rabak
    Cesar Rabak, Dec 27, 2006
    #5
  6. Ja Bo

    Guest

    You have to make sure that the variable types are correct. Here's a
    revised version of your script

    name = "My name" # This variable was missing in the original code

    puts "How old are you?"
    age = gets.chomp # gets are a string by default

    puts name + " is " + age + " years old."

    t = Time.now
    born = t.year-age.to_i # convert age to an integer

    puts "You were probably born in " + born.to_s + "." #convert born to a
    string

    Hope this helps

    Luis

    Ja Bo wrote:
    > I am brand new to Ruby and I would greatly appreciate any help you guys
    > can provide!
    >
    > If this is not the correct place to post them please let me know where I
    > should post these types of questions.
    >
    > This very short program is just supposed to take today's date using t =
    > Time.now and calculating what year the user was born...
    >
    > Code:
    > puts "How old are you?"
    > age = gets.chomp
    >
    > puts name + " is " + age + " years old."
    >
    > t = Time.now
    > born = t.year - age
    >
    > puts "You were probably born in " + born + "."
    >
    >
    > Thank you!!!
    >
    > --
    > Posted via http://www.ruby-forum.com/.
    , Dec 27, 2006
    #6
  7. Ja Bo

    Ja Bo Guest

    Ja Bo, Dec 27, 2006
    #7
  8. Ja Bo

    Kenosis Guest

    Kenosis, Dec 27, 2006
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jason Lillywhite
    Replies:
    6
    Views:
    169
    Jason Lillywhite
    Jun 11, 2008
  2. Heesob Park

    Why Fixnum===Fixnum is false?

    Heesob Park, May 13, 2009, in forum: Ruby
    Replies:
    5
    Views:
    113
    Joel VanderWerf
    May 14, 2009
  3. Prateek Agarwal
    Replies:
    4
    Views:
    395
    Ken Bloom
    Jul 31, 2009
  4. MaggotChild
    Replies:
    6
    Views:
    130
    MaggotChild
    Dec 2, 2009
  5. Mayank K.
    Replies:
    3
    Views:
    330
    Mayank Kohaley
    Mar 24, 2011
Loading...

Share This Page