Ruby 我想不出我在哪里犯了错误

Ruby 我想不出我在哪里犯了错误,ruby,Ruby,如果调用该方法,该代码应该可以工作,但该方法不需要参数。无论如何,这些变量都是在本地声明的 现在你要做的是: def average_of_three(num1, num2, num3)​ puts "Enter first number" num1= gets.to_i puts "Enter second number" num2 = gets.to_i puts "Enter third number" num3 = gets.to_i avg=0

如果调用该方法,该代码应该可以工作,但该方法不需要参数。无论如何,这些变量都是在本地声明的

现在你要做的是:

def average_of_three(num1, num2, num3)​

  puts "Enter first number"
  num1= gets.to_i

  puts "Enter second number"
  num2 = gets.to_i

  puts "Enter third number"
  num3 = gets.to_i

  avg=0

  avg = (num1 +num2 + num3 )/3
  puts "your average is#{avg}"
end
初始值并不重要,因为您忽略了它们。他们可能是:零或谁在乎!一模一样

不过,这不是很好的Ruby代码。在编写Ruby时,首先考虑数据结构

例如,要获取三个值:

average_of_three(0, 0, 0)
这会询问一系列问题,并将结果存储在一个数组中,这就是它的作用

现在,您可以平均这些:

def get_n(n = 3)
  n.times.map do |i|
    print "Enter number #{i+1}: "
    gets.to_i
  end
end
这有一个guard子句,除非至少有一个值,否则它不会执行。然后它调用,这毫不奇怪地将所有值相加。除以长度,就完成了

所以你要把这一切联系在一起:

def average(values)
  return unless (values.any?)

  values.sum / values.length
end

注意:在Ruby中,当你把一个整数除以一个整数时,你总是得到一个整数。这意味着这些值将四舍五入。如果您希望得到分数结果,可以将输入转换器从.to_i切换到.to_f。这一更改将导致浮动在代码的其余部分。

有什么问题吗?现在,我更喜欢使用fdiv而不是在所有内容上都加上一个to_f。@SergioTulentsev怎么会这样?我想,看起来更干净、更能揭示意图。直接说我想从中得到一个浮动,而不是依赖于我们碰巧收到的任何类型的默认行为。
values = get_n

puts "Average is: #{average(values)}"