2012-03-24 28 views
0

我想减去我的数组中最大和最小的两个值。我已经排序他们然后试图减去他们,但输出是不同的。我也试图使用循环,但我不断收到错误。很高兴告诉我我做错了什么。感谢红宝石数组与减法

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

+1

相反只是说的 “它不工作”,试试描述症状,并且'数字= 4.times.collect {rand(50)}'。 – 2012-03-24 20:45:42

+2

对于初学者来说,'input =='q''因为'input'是一个字符串。 – 2012-03-24 20:46:26

+0

感谢您的帮助 – user1239333 2012-03-24 20:55:02

回答

2

这个怎么样呢?

numbers = Array.new(10) {|n| rand(50) } 
result = numbers.max - numbers.min 
puts result 
1

排序方法不会覆盖您的数组。所以你最终从最后一个随机数中减去第一个随机数。

在这个例子中,使用sort!代替。

puts number.sort!.inspect 

这将覆盖您的原始数组。

Here's一个很好的博客文章,我前一段时间发现了所谓的爆炸方法(以a!结尾的方法)。

0

使用sort与爆炸版本。

ers.sort! 
puts ers.last - ers.first 
1

一些错误:

break if input == q 

q是-never defined-变量。使用字符串代替:

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