我试图在数组中减去最大和最小的两个值。我已经对它们进行了排序,然后尝试减去它们但输出却不同。我也试图使用循环,但我一直在收到错误。很高兴告诉我我做错了什么。感谢
numbers = [randomNo = rand(50),randomNo = rand(50),randomNo = rand(50),randomNo = rand(50)]
loop do
puts "type s to start and q to quit"
input = STDIN.gets
break if input == q
puts numbers.sort.inspect
puts numbers.first - numbers.last
end
output:[3, 13, 21, 46]
18
我想要46 - 3
答案 0 :(得分:2)
相反呢?
numbers = Array.new(10) {|n| rand(50) }
result = numbers.max - numbers.min
puts result
答案 1 :(得分:1)
sort方法不会覆盖您的数组。所以你最后从最后一个随机数中减去第一个随机数。
在此示例中,使用sort!代替。
puts number.sort!.inspect
这将覆盖原始数组。
Here's一篇很好的博客文章,我前段时间发现了所谓的爆炸方法(以那些结尾的方式!)。
答案 2 :(得分:1)
一些错误:
break if input == q
q是无定义变量。改为使用字符串:
break if input == "q"
STDIN.gets
包含\n
。因此,您必须与“q \ n”或strip
输入进行比较。
根据您的执行情况,您将在结束后看到结果。使用STDOUT.flush
立即显示结果。
sort
不会更改您的数组。请改用sort!
。排序后,最大值是最终的。相反numbers.first - numbers.last
您需要numbers.last - numbers.first
(或者您需要`反向。
总计:
numbers = [randomNo = rand(50),randomNo = rand(50),randomNo = rand(50),randomNo = rand(50)]
loop do
puts "type s to start and q to quit"
input = STDIN.gets
break if input.strip == "q"
numbers.sort!
puts numbers.inspect
puts numbers.last - numbers.first
STDOUT.flush
end
另一个版本:
puts "Push any key unless q to start"
STDOUT.flush
while STDIN.gets.strip != "q"
numbers = Array.new(5){ rand(50) }.sort
puts numbers.inspect
puts numbers.last - numbers.first
puts "type q to quit - any other key to repeat."
STDOUT.flush
end
答案 3 :(得分:0)
将sort
与bang版本一起使用。
ers.sort!
puts ers.last - ers.first