Delphi 什么';我检查一个数字是另一个数字的倍数的方法有什么问题?

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

我在一个过程中使用此代码,我对第一个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 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))那么
  • 如果(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