我想在数组中打印奇数。我有这个:
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>'
有什么想法吗?
答案 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
?
在您的代码中,numbers
是Array
,但是您只能将%
用于数字。
您不需要它,因为在Ruby Integer
中具有内置方法odd?
。如果数字为奇数,则返回true
。
您可以对.find_all
使用方法.select
或Array
。阅读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?)}"