Delphi 什么';我检查一个数字是另一个数字的倍数的方法有什么问题?
我在一个过程中使用此代码,我对第一个if子句有问题:Delphi 什么';我检查一个数字是另一个数字的倍数的方法有什么问题?,delphi,modulo,Delphi,Modulo,我在一个过程中使用此代码,我对第一个if子句有问题: procedure TForm1.Button1Click(Sender: TObject); var i,indice,n,conto:integer; a:string; begin indice:=1; conto:=0; Memo2.Lines.Add('<tr>'); for i := 1 to 649 do begin if ((i <> 11) or (i mod
procedure TForm1.Button1Click(Sender: TObject);
var i,indice,n,conto:integer;
a:string;
begin
indice:=1;
conto:=0;
Memo2.Lines.Add('<tr>');
for i := 1 to 649 do
begin
if ((i <> 11) or (i mod 11 <> 0)) then
begin
proced4();
end
else
begin
Memo2.Lines.Add('</tr><tr>');
proced5();
end;
end;
end;
对于我编写的代码,只有当索引I为11时,代码才会调用proced5()。但是,例如,当i为22或33时,它执行proced4()而不是proced5()
如何解决此问题?如果测试没有意义:
i mod 11 <<-- will be 0 for any multiple of 11. (including 0)
(i <> 11) <<-- superflous, the mod already does the job.
你的缩进不一致;您知道按CTRL+D将使Delphi自动缩进您的代码吗
为什么您的代码不起作用
让我们把考试分为两部分
if ((i <> 11) or (i mod 11 <> 0)) then
如果((i 11)或(i mod 11 0))那么
或返回true
李>
(i 11)几乎总是正确的,除非i=11李>
因此,测试B:(i mod 11 0)
只有在(i=11)的情况下才会被测试李>
在所有其他情况下,proced4()代码>开始运行李>
案例i=22、i=33等不符合测试not(i11)
aka(i=11)
,因此不会触发else李>
注意第5点中的双重否定,这就是为什么if语句应该测试积极的东西李>
好的,但这并没有解决我的问题。您需要修复什么?对于我编写的代码,只有当索引I为11时,代码才会调用proced5()
。但是,例如,当i为22或33时,它执行proced4()
,而不是proced5()
@AlbertoRossi为什么在注释中问这个问题?当你要求我们修理东西时,你必须告诉我们:1。你期望发生什么,2。发生了什么事。记住,我们无法读懂你的心思。请务必把这些信息放到问题中。@DavidHeffernan,Alberto在他的问题中确实说过,这只是有点神秘而已,请看他的第一稿,倒数第二行。我认为Ctrl+D在旧版本上不起作用。是2010年推出的吗?
for i := 1 to 649 do begin
if ((i mod 11) = 0) then begin
Memo2.Lines.Add('</tr><tr>');
procedureWithAMeaningfulName5();
end else {if not multiple of 11 then} begin
procedureWithAMeaningfulName4();
end;
end; {for}
`Button1`: bad, what does the button do? Should e.g. `ButtonBuildHTMLTable`
`proced5`: what the hell does that do?? Give it a meaningful name.
`indice`: Index of what?
`conto`: count of what?
if ((i <> 11) or (i mod 11 <> 0)) then