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