массив ruby ​​с вычитанием - PullRequest
0 голосов
/ 25 марта 2012

Я пытаюсь вычесть два значения в моем массиве - самое большое и самое маленькое.Я отсортировал их, затем попытался вычесть их, но результат отличается.Я также пытаюсь использовать цикл, но продолжаю получать ошибки.Было бы неплохо показать мне, что я делаю не так.спасибо

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 ]

2 голосов
/ 25 марта 2012

А как насчет этого?

numbers = Array.new(10) {|n| rand(50) }
result = numbers.max - numbers.min
puts result
1 голос
/ 25 марта 2012

Некоторые ошибки:

  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 
1 голос
/ 25 марта 2012

Метод сортировки не перезаписывает ваш массив.В итоге вы вычитаете первое случайное число из последнего случайного числа.

В этом примере используйте sort!вместо этого.

puts number.sort!.inspect

Это заменит ваш исходный массив.

Вот хороший пост в блоге, который я нашел некоторое время назад о так называемых методах взрывачто конец с!).

0 голосов
/ 25 марта 2012

Используйте sort с ударной версией.

ers.sort!
puts ers.last - ers.first
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...