Reputation: 11
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
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
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
Reputation: 311143
There are two problems here:
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
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