在数组中打印奇数

时间:2018-12-16 22:36:38

标签: ruby

我想在数组中打印奇数。我有这个:

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 :(得分:1)

以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

取模方法不适用于作为接收器的数组,这是您试图做的。这就是错误消息告诉您的内容。

答案 1 :(得分:0)

奇数是一个被二除的数,剩下一个余数。

因此在Ruby中,它看起来像number % 2 != 0。您为什么决定使用% 3

在您的代码中,numbersArray,但是您只能将%用于数字。

您不需要它,因为在Ruby Integer中具有内置方法odd?。如果数字为奇数,则返回true

您可以对.find_all使用方法.selectArray。阅读here

您还使用numbers = numbers + 1。最好写numbers += 1,这是相同的。但是使用方法.times时不需要它。阅读here

顺便说一句,如果变量为.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?)}"