Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有整数#次和模的ruby奇怪行为_Ruby - Fatal编程技术网

具有整数#次和模的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,这让我明白了。