这是我使用的代码,其目的是让用户输入整数,然后该程序将获取所有数字的总和,包括输入的数字。可能有一种更简单的方法来执行此操作
sum = 0
puts "please enter a number"
counter = gets.chomp.to_i
begin
sum += counter
counter -= 1
end while counter == 0
您的代码问题在循环中处于counter == 0
状态,因为它仅运行一次,如果count
不等于0
(换句话说,如果用户输入不是1
),它停止。您不仅可以在不使用循环的情况下进行此操作,还可以缩短整个过程:
counter = gets.to_i
sum = (0..counter).inject(:+)
演示
P.S。正如您可能注意到的那样,您可以在使用.to_i
时省略.chomp
。
是的,使用类似的东西(来自ActivesUpport的sum
)
sum = (counter + 1).times.sum
或没有ActiveSupport:
sum = (counter + 1).times.inject(&:+)
num = gets.to_i
sum = num*(num+1)/2
如果我正确理解您,您可以尝试这样的事情...
puts "Please enter a positive number..."
number = gets.chomp.to_i
puts "Sum of all numbers is: #{ (1..number).inject { |sum, n| sum + n} }"
我正在使用枚举的方法"注入"来总结总数。在http://ruby-doc.org/core-2.2.2/enumosit.html#method-i-inject中了解有关"注入"方法的更多信息。
希望这会有所帮助!
,据我了解,您正在尝试汇总范围的元素。给出3,您想获得6个。
一种方法(耗时)是使用inject
或sum
。您可以尝试以下内容:
1. [*1..value].sum
2. [*1..value].inject(:+)
另一个(推荐),非常有效的方法是使用此方程:
(value + 1) * (value) / 2