Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 获取范围内的数字总和(从0到用户输入)_Ruby_Sum - Fatal编程技术网

Ruby 获取范围内的数字总和(从0到用户输入)

Ruby 获取范围内的数字总和(从0到用户输入),ruby,sum,Ruby,Sum,这是我正在使用的代码,它的目的是让用户输入一个整数,然后程序将获取所有数字的总和,包括输入的数字。可能有一种更简单的方法可以做到这一点 sum = 0 puts "please enter a number" counter = gets.chomp.to_i begin sum += counter counter -= 1 end while counter == 0 是的,使用类似的方式(sum来自ActiveSupport): 或者没有ActiveSupport: s

这是我正在使用的代码,它的目的是让用户输入一个整数,然后程序将获取所有数字的总和,包括输入的数字。可能有一种更简单的方法可以做到这一点

 sum = 0
 puts "please enter a number"
 counter = gets.chomp.to_i
 begin
  sum += counter
  counter -= 1
 end while counter == 0

是的,使用类似的方式(
sum
来自ActiveSupport):

或者没有ActiveSupport:

sum = (counter + 1).times.sum
sum = (counter + 1).times.inject(&:+)

代码的问题在于循环中的
counter==0
条件,因为它只运行一次,如果
count
不等于
0
(换句话说,如果用户的输入不是
1
),它将停止。您不仅可以在不使用循环的情况下完成此操作,还可以缩短整个过程:

counter=get.to_i
总和=(0..计数器)。注入(:+)


另外,正如您可能已经注意到的,当您使用
时,您可以省略
.chomp
。\u i

如果我理解正确,您可以尝试这样的方法

puts "Please enter a positive number..."
number = gets.chomp.to_i

puts "Sum of all numbers is: #{ (1..number).inject { |sum, n| sum + n} }"
我使用可枚举方法“注入”来总结总数。了解有关“注入”方法的更多信息,请访问


希望这有帮助

据我所知,您正在尝试对范围的元素求和。给出数字3,你想得到的和是6

一种方法(耗时)是使用
inject
sum
。您可以尝试以下操作:

1. [*1..value].sum
2. [*1..value].inject(:+)
另一种(推荐的)非常有效的方法是使用以下等式:

(value + 1) * (value) / 2

由于计数器在每次迭代中递减,不会产生相同的结果,因此您的循环只执行一次(如果输入为1,则执行两次),因为在大多数情况下,计数器与0不同,如@RuneFS所说,如果您将计数器更改为
end while counter!=0,则代码的问题在于
end while counter==0
0
,它可以做你想做的事。我完全错过了这是求和级数之和的基本纯数学解!非常感谢你!
(value + 1) * (value) / 2