Печать нечетных чисел в массиве - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу напечатать нечетные числа в массиве.У меня есть это:

numbers = []
puts "Please enter 10 numbers, one at a time."
10.times do
  puts "Please enter a number"
  numbers << gets.chomp.to_i
  if numbers % 3 == 0
    p numbers
  end
  numbers = numbers + 1
end
puts "Here are the numbers you selected"
p numbers

Когда я набираю число, я получаю следующее:

undefined method `%' for [1]:Array
(repl):6:in `block in <main>'

Есть идеи о том, что происходит?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Нечетное число - это число, которое при делении на два оставляет остаток.

Так что в Ruby это выглядит как number % 2 != 0.Почему вы решили использовать % 3?

В вашем коде numbers равно Array, но вы можете использовать % только для чисел.

И вам не нужноэто потому что в Ruby Integer есть встроенный метод odd?.Возвращает true, если число нечетное.

Вы можете использовать метод .find_all или .select для вашего Array.Читайте здесь .

Также вы используете numbers = numbers + 1.Лучше написать numbers += 1, тоже самое.Но вам не нужно это при использовании метода .times.Читайте здесь .

Кстати, вам не нужно использовать .chomp, если ваша переменная будет Integer, просто используйте .to_i

Так что этолучше использовать такой код:

numbers = []
10.times do
  puts 'Enter a number'
  number = gets.to_i
  numbers << number
end
puts "Here your odd numbers: #{numbers.find_all(&:odd?)}"
0 голосов
/ 17 декабря 2018

Проверка значений по модулю 3 не поможет правильно определить нечетные числа.Однако в Ruby есть встроенный метод Integer#odd?.Объедините это с методом Array#select, и вы сможете быстро выбрать нечетные элементы массива, прочитав их.

a = (1..10).to_a    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
p a.select(&:odd?)  # [1, 3, 5, 7, 9]

Если вы настаиваете на использовании модуляОператор, вы должны проверить x % 2 == 1, чтобы проверить целочисленность x на нечетность:

p a.select { |x| x % 2 == 1 }  # [1, 3, 5, 7, 9] again, but less efficiently

Метод modulo не работает с массивом в качестве получателя, что вы и пытались сделать.Вот что говорит вам сообщение об ошибке.

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