Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Beginner Ruby if else

I've check to see if the program is recieving number and names and it is. I'm wondering why doesn't it print "fred" when input number is 1?

number = ARGF.read.chomp
names = %w{fred betty barney}
if number == 1
  puts names[0]
elsif number == 2
  puts names[1]
elsif number == 3
  puts name[2]
end
like image 821
jimmyc3po Avatar asked Feb 22 '26 23:02

jimmyc3po


2 Answers

number is likely a string here, but you are comparing it with an integer.

1 == '1' # false

try

number = ARGF.read.chomp.to_i # note the to_i here
names = %w{fred betty barney}
if number == 1
  puts names[0]
elsif number == 2
  puts names[1]
elsif number == 3
  puts names[2]
end

Also, you can use a case/when statement when you want to take a different path based on multiple values of a single variable. This is usually the cleaner way to handle this type of flow.

number = ARGF.read.chomp.to_i
names = %w{fred betty barney}

case number
when 1
  puts names[0]
when 2
  puts names[1]
when 3
  puts names[2]
end

Or in this case, the even more simple:

number = ARGF.read.chomp.to_i
names = %w{fred betty barney}
puts names[number-1]

should work.

like image 50
Alex Wayne Avatar answered Feb 25 '26 12:02

Alex Wayne


I know you're learning if...else, but keep in mind you can also do this:

number = ARGF.read.chomp.to_i - 1
names = %w{fred betty barney}

puts names[number]
like image 44
clem Avatar answered Feb 25 '26 13:02

clem



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!