Ruby 最大和最小值。。。需要方法返回两个变量值

Ruby 最大和最小值。。。需要方法返回两个变量值,ruby,Ruby,我是新的编码,需要帮助理解我的逻辑和/或语法在以下方法中的错误。。。程序应该返回数组的最大值和最小值。我的目标是在方法之外有两个变量(max和min),这样当方法在数组中运行时,值就会相应地被替换。谢谢你的帮助 list=[4,6,10,7,1,2] max=list[0] min=list[0] def maxmin(list) f=list.shift if list.empty?then return max = f return min =

我是新的编码,需要帮助理解我的逻辑和/或语法在以下方法中的错误。。。程序应该返回数组的最大值和最小值。我的目标是在方法之外有两个变量(max和min),这样当方法在数组中运行时,值就会相应地被替换。谢谢你的帮助

    list=[4,6,10,7,1,2]

max=list[0]
min=list[0]

def maxmin(list)

  f=list.shift
  if list.empty?then
      return max = f 
      return min = f
  end

  t=maxmin(list)
  if(f>t) then
    return max = f 
    return min = t
  else
    return max = t 
    return min = f
  end

end

printf("max=#{max}, min=#{min}, method return=%d\n", maxmin(list)) 

Max和Min方法已在Stdlib或ruby中

所以使用它

list.max
list.min

使用1.9.1,就有了minmax

>> list=[4,6,10,7,1,2]
=> [4, 6, 10, 7, 1, 2]
>> list.minmax
=> [1, 10]

编辑:您的问题只是关于返回两个变量吗?如果是这样,只需用逗号分隔它们,它们将作为数组返回:

return min_value, max_value
要添加已经编写的内容(是的,使用内置库),通常不建议在所使用的方法之外修改变量。请注意,在框架调用中,将返回新值。这让调用方法的人决定如何处理这些值,而不是假设变量存在然后一直更改它们的方法

如果我必须写它(我是Ruby新手,所以我可能不会尽可能优雅地做这件事,但应该很容易理解),我会这样写:

def find_min_max(list)
  if (list.nil? || list.count == 0)
    return nil, nil
  end

  min = list.first
  max = list.first

  list.each do |item|
    if item.nil?
      next
    elsif item < min
      min = item
    elsif item > max
      max = item
    end
  end

  return min, max
end

list = [1, 439, 2903, 23]
min_max = find_min_max list

p min_max
def find_min_max(列表)
if(list.nil?| | list.count==0)
返回零,零
结束
min=list.first
max=list.first
列出每个应做的事项|
如果是item.nil?
下一个
elsif项目最大值
最大值=项目
结束
结束
返回最小值,最大值
结束
列表=[14392903,23]
最小值最大值=查找最小值最大值列表
p最小值最大值

我同意给出的其他答案。除了作为编程练习之外,编写此方法没有任何意义

逻辑上存在一些问题,可以解释为什么你没有得到你期望的结果

首先有3对return语句,第二对语句永远不会被调用,因为方法已经返回了,例如

return max = f
return min = f # never gets called
要使递归算法工作,您需要同时返回最小值和最大值,因此我猜您需要在单个return语句中返回一对值或一个数组

第二,在第3行和第4行初始化的min和max变量不在minmax方法体的范围内,因此您实际上是在那里定义新的局部变量

如果您修改代码,您可能会得到类似的结果,但这不是您需要在生产环境中编写的方法,我相信有更好的方法可以做到这一点:

list = [4,6,10,7,1,2]

def maxmin(list)
  f = list.shift
  if list.empty?
    return f, f
  end

  max, min = maxmin(list)
  return f > max ? f : max, f < min ? f : min
end

max, min = maxmin(list)
puts "min = #{min}, max = #{max}"
list=[4,6,10,7,1,2]
def最大最小值(列表)
f=列表.shift
如果list.empty?
返回f,f
结束
最大值,最小值=最大值(列表)
返回f>max?f:最大值,f
问题在于,您试图使用全局变量(称为@max、@min),但您希望代码分配甚至未分配的值。如果可能的话,您宁愿选择局部变量而不是全局变量,因为可访问性

第二个问题是,在使用全局变量的情况下,不必返回任何内容。例如:

@value = 0

def test
  @value = 1
end

puts @value ==> 0
test # change @value to 1
# it also return 1 because ruby return last statement value
puts @value ==> 1
在使用局部变量的情况下,应该返回多个结果。 这就是Ruby所做的工作,Ruby会自动将multiple return语句转换为array,并将array转换为multiple variables赋值)

list=[4,6,10,7,1,2]
def最大最小值(列表)
f=列表.shift
如果list.empty?然后
返回f,f#f是一个元素列表的最小值和最大值
结束
mi,ma=maxmin(列表)
如果(f>ma),则
ma=f
elsif(f
你的方法很有趣(爱递归),但它不是很优雅,性能也不是很好,而且有点混乱,这与ruby的愿景相去甚远

list = [4,6,10,7,1,2]

def minmax(list)
  max = list[0]
  min = list[0]

  list.each do |elem|
    if elem > max then
      max = elem
    elsif elem < min
      min = elem
    end
  end

  return min, max
end

min, max = minmax(list)
printf("max=#{max}, min=#{min}") 
list=[4,6,10,7,1,2]
def最小最大值(列表)
最大值=列表[0]
最小值=列表[0]
列出每个do | elem|
如果元素>最大值,则
最大=元素
elsif元素
是代码的更清晰版本,即使不那么酷。你可以用全局变量来尝试这些答案,这应该很容易


显然,由于Ruby vision的缘故,当您完成这些操作时,欢迎您使用Array.max和Array.min。

您好!非常感谢您的反馈。我可能应该在问题中表达这一点,但这纯粹是为了我自己的学习练习。我是新手,正在努力熟悉语法和逻辑。因此,每个人的回答都很有帮助。我希望你们将来能有更多的反馈和耐心!非常感谢你!如果您知道任何一流的在线培训/学习材料,请告诉我!尝试
list.minmax
它将从列表返回具有最小值和最大值的数组。
list = [4,6,10,7,1,2]

def minmax(list)
  max = list[0]
  min = list[0]

  list.each do |elem|
    if elem > max then
      max = elem
    elsif elem < min
      min = elem
    end
  end

  return min, max
end

min, max = minmax(list)
printf("max=#{max}, min=#{min}")