每当我需要在for
循环中每隔300次迭代执行某个操作时,我就会尝试显示(有意义吗?)
这是代码中我想要做的,但不是我想要的方式:
for I := 0 to 2000 do
Begin
if I = 300 then
DoAnAction;
if I = 600 then
DoAnAction
if I = 900 then
DoAnAction
if I = 1200 ......... Same action all over, but I don't want to check all those conditions!
End;
所以我被告知要使用mod
运算符,这就是我的工作方式:
for I := 0 to 2000 do
Begin
if I mod 300 = 299 then
DoAnAction;
End;
然而,使用上述代码段的结果将执行299,599,899的操作....
如何使用Mod操作符在300,600,900 ......进行操作? (做if I mod 300 = 300
没有用)
谢谢!
答案 0 :(得分:10)
for I := 0 to 2000 do
Begin
if (I mod 300 = 0) and (I > 0) then
DoAnAction;
End;
虽然你以前的版本确实有意义,但我= 299是第300遍;)
编辑:I mod 300 = 300
无效,因为mod
运算符返回了devision的剩余部分,根据定义,它将在范围0..299
答案 1 :(得分:4)
mod
运算符返回除法的其余部分。因此,如果您希望每300次迭代执行一次,请使用i mod 300 = 0
。
I mod 300 = 300
没有意义,因为不能有300除以300的剩余部分。
答案 2 :(得分:4)
使用此:
if i mod 300 = 0
模数运算符返回除法的余数。
这是一个帮助你的例子。将TMemo放在空白的新表单上,并将其放在FormCreate
evemt:
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
const
Output = 'i mod %d = %d';
begin
Memo1.Clear;
for i := 0 to 10 do
Memo1.Lines.Add(Format(Output, [i, i mod 5]));
end;
运行它,查看备忘录中的输出。
答案 3 :(得分:1)
尝试(I <> 0) AND ((I mod 300) = 0)
。
答案 4 :(得分:0)