Samba
Samba

Reputation: 11

Sum in Ruby array

I'm trying to do a program that asks the user for three numbers one at a time, store them in array, then print the list of the numbers and the total.

Please explain.

Here is what I have so far:

numbers = Array.new
numbers = []
puts "Enter first number: "
first = gets.to_i
puts "Enter second number: "
second = gets.to_i
puts "Enter third number: "
third = gets.to_i
def sum(numbers)
  return 0 if numbers.length < 1
  result = 0
  numbers.each { |num| result += num }
  result
end

Upvotes: 0

Views: 281

Answers (4)

Wand Maker
Wand Maker

Reputation: 18762

Here is one more way of doing this:

sum = 3.times.collect{ |i| puts "Enter number #{i + 1}:"; gets.chomp.to_i }.inject(:+)
puts sum

Could also be written like below:

read_num = lambda{|i| puts "Enter number #{i}"; gets.chomp.to_i}
sum = 3.times.map(&read_num).reduce(:+)
puts sum

Upvotes: 2

user872176
user872176

Reputation: 108

You can also use Array's reduce method.

http://ruby-doc.org/core-2.1.0/Enumerable.html#method-i-reduce

#!/usr/bin/ruby
numbers = Array.new
# numbers = [] #this is same as above
puts "Enter first number: "
first = gets.to_i
numbers<<first
puts "Enter second number: "
second = gets.to_i
numbers<<second
puts "Enter third number: "
third = gets.to_i
numbers<<third
puts numbers.reduce {|sum, n| sum + n } #here

Upvotes: 2

Mureinik
Mureinik

Reputation: 311143

There are two problems here:

  1. You aren't pushing the numbers you read into the array
  2. You defined the sum function properly, but aren't calling it anywhere


#!/usr/bin/ruby
numbers = Array.new # note the second, redundant, initialization on numbers was removed
puts "Enter first number: "
(numbers ||= []) << gets.to_i # Pushing read value into the array (issue 1)
puts "Enter second number: "
(numbers ||= []) << gets.to_i # Here too
puts "Enter third number: "
(numbers ||= []) << gets.to_i # And here too
def sum(numbers)
  return 0 if numbers.length < 1
  result = 0
  numbers.each { |num| result += num }
  result
end

puts sum(numbers) # Calling sum (issue 2)

Upvotes: 0

Vaibhav Namburi
Vaibhav Namburi

Reputation: 189

You haven't pushed any of your inputs into the array, you can either use the push function or the << to add elements to your array

  #!/usr/bin/ruby
numbers = Array.new
numbers = []
puts "Enter first number: "
first = gets.to_i
numbers<<first
puts "Enter second number: "
second = gets.to_i
numbers<<second
puts "Enter third number: "
third = gets.to_i
numbers<<first
def sum(someArray)
  return 0 if someArray.length < 1
  result = 0
  someArray.each { |num| result += num }
  result
end

hope that helps

Upvotes: 0

Related Questions