#ruby
#ruby
Вопрос:
nums = [4, 6, 8, 7]
until num[index] == nil
if num[index] > num[index 1]
puts num[index]
index = 1
elsif
index = index 1
end
По какой-то причине я получаю вывод:
8
Обратная трассировка (последний последний вызов): 1: из main.rb:21:in <main>' main.rb:21:in
>’: ошибка сравнения целого числа с нулем (ошибка аргумента)
Не уверен, как исправить код, чтобы не получить ArgumentError .
Комментарии:
1. Вам нужен другой if, чтобы проверить,
nums[index 1]
не равно ли оно nil , в противном случае вы получите эту ошибку, поскольку вы не можете сравнивать целые числа с объектами Nil.2. Хорошо, я пытался реализовать другой оператор if, как вы сказали, но я все еще получаю ту же ошибку. Можете ли вы быть более конкретным?
3. Конечно
until nums[index] == nil; if nums[index 1]; if nums[index] > nums[index 1]; puts nums[index]; end; end; index = 1; end
.
Ответ №1:
Ответ №2:
Мы, конечно, должны сохранить вычислительную сложность на уровне O( nums.size
) (выполнив один проход по массиву). Мой друг @Sergio указывает, что не может быть ничего проще, чем
nums.max
#=> 8
который использует метод Array#max. Это также будет хорошо работать в Code Golf.
Комментарии:
1. придирка: это начальное значение подведет вас, если
nums
оно пустое.2. И если мы можем использовать
Array#max
, почему бы не использовать его дальшеnums
? 🙂
Ответ №3:
Это должно сработать, оно вернет наибольшее значение в массиве:
nums = [4, 6, 8, 7]
index=0
until index==nums.length-1 #
if nums[index] > nums[index 1]
largest= nums[index]
index = 1
else
index = index 1
end
end
puts largest
Комментарии:
1. Я знаю. Но я спрашиваю, как это сделать без перечисляемых.
2. Карен, какой перечислимый метод ты имеешь в виду?
3. @Karen:
Array#max
определяется вArray
, а не вEnumerable
.