в `+ ': nil нельзя преобразовать в Integer (TypeError) Ruby в Rails - PullRequest
0 голосов
/ 06 мая 2020

Получите следующую ошибку при тестировании моего метода для ложных тестовых случаев, показанных ниже, не знаю почему. Другие тестовые примеры, которые приводят к истинным результатам, работают хорошо. Метод принимает массив целых чисел и возвращает true, если сумма любых трех последовательных элементов равна 7, и возвращает false в противном случае.

def lucky_sevens?(numbers)
      i=0
      while i <= numbers.length
        if (numbers[i] + numbers[i+1] + numbers[i+2]) == 7
            return true
            end
        i+=1
      end
    end

помещает lucky_sevens? ([7,7,7,7,]) == false

помещает lucky_sevens? ([3,4,3,4]) == false

1 Ответ

2 голосов
/ 06 мая 2020

Вы проверяете последний элемент, а затем 2 числа после него. Доступ к элементу в массиве больше, чем длина, возвращает nil. Попытка добавить nil к числу приведет к ошибке, которую вы видели.

Чтобы решить эту проблему, вам следует прекратить проверять, когда последний из трех элементов достигает конца массива, а не первого. Это означает, что вы должны остановить 2 элемента раньше.

Этого легко добиться, просто вычтя 2 из длины в вашем l oop.

def lucky_sevens?(numbers)
  i=0
  while i < numbers.length - 2
    if (numbers[i] + numbers[i+1] + numbers[i+2]) == 7
      return true
    end
    i+=1
  end
  false
end

Еще ruby способ сделать это, будет следующим:

def lucky_sevens?(numbers)
  numbers.each_cons(3).any? do |group_of_3|
    group_of_3.sum == 7
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...