具有整数#次和模的ruby奇怪行为
如果我运行这个具有整数#次和模的ruby奇怪行为,ruby,Ruby,如果我运行这个 100.times do |i| unless i == 0 || i.modulo(2) == 0 p "odd number #{i}" end end 我只得到奇数,这是它应该工作的方式 如果我运行这个 100.times do |i| unless i == 0 || i.modulo(3) == 0 p "even number #{i}" end end 然后我得到一个混合的数字,其中一些是偶数 也许是我,或者“除非”不是这里使用的最佳控件
100.times do |i|
unless i == 0 || i.modulo(2) == 0
p "odd number #{i}"
end
end
我只得到奇数,这是它应该工作的方式
如果我运行这个
100.times do |i|
unless i == 0 || i.modulo(3) == 0
p "even number #{i}"
end
end
然后我得到一个混合的数字,其中一些是偶数
也许是我,或者“除非”不是这里使用的最佳控件。虽然一个给了我想要的结果,但另一个没有,这有点奇怪。I.modulo(3)==0
不是奇数的测试;这是对可被3整除的数字的测试
回想一下,偶数可以被2整除(或x%2==0
),奇数可以被整除!甚至
。因此,只有偶数与奇数的模检验是模2,结果为0或1
例如:
100.times { |i|
p "even number #{i}" unless i % 2==1 # better as if i % 2==0
p "odd number #{i}" unless i % 2==0 # better as if i % 2==1
}
为了保持笔直,您还可以使用
.偶数?
和奇数?
您的第二个循环将给出不可被3整除的数字。有些是偶数,有些不是。为什么不直接使用。偶数?
和。奇数?
——你的问题是什么?我想说的是,我可以通过使用2作为参数在块中进行模运算来阻止所有偶数,但使用3(阻止奇数)是行不通的。例如,使用模(3)==0,我得到89、97、65等数字,是的,我知道。奇数?还有。甚至?是的,我们知道你得到了什么数字,因为你写的代码工作正常。很难确定你到底想要什么。谢谢你@dawg,这让我明白了。