带减法的ruby数组

时间:2012-03-24 20:43:20

标签: ruby arrays loops

我试图在数组中减去最大和最小的两个值。我已经对它们进行了排序,然后尝试减去它们但输出却不同。我也试图使用循环,但我一直在收到错误。很高兴告诉我我做错了什么。感谢

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

4 个答案:

答案 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