使用嵌套循环,循环变量以什么顺序递增?

Bya*_*gan 0 delphi for-loop position matrix cycle

我有一个关于如何在Delphi中填充矩阵的问题?在哪个方式和哪个行和列第一个econd和哪个数字后跟哪个数字在Delphi中的顺序是什么?你能帮忙澄清一下吗?详情如下:

我有5x5 Matrix,数字1到5,代码如下:

for i := 1 to 5 do
   for j := 1 to 5 do
       x[i, j] := i + j;
Run Code Online (Sandbox Code Playgroud)

x [2,2]和x [1,1]等位置会是什么?填充矩阵的顺序是什么?用哪种方法?什么行和列填充第一,第二,第三等?谢谢您的回答.

Gle*_*234 5

代码按其显示的顺序从上到下工作.如果它看起来有点好(我不建议你像这样编码,但只是显示逻辑更好):

for i := 1 to 5 do
  begin
    for j := 1 to 5 do
      begin
        x[i, j] := i + j;
      end;
  end; 
Run Code Online (Sandbox Code Playgroud)

逻辑从i = 1开始,然后计算内部循环.所以基本上,你这样做:

 x[1, 1] := 1 + 1;
 x[1, 2] := 1 + 2;
 ...
 x[1, 5] := 1 + 5;
 x[2, 1] := 2 + 1;
 ..
 x[5, 4] := 5 + 4;
 x[5, 5] := 5 + 5;
Run Code Online (Sandbox Code Playgroud)

希望这有助于您了解在这种情况下for循环的工作原理.

  • 如果你想看看这种东西是如何工作的那么你总是可以使用手表调试和评估/修改选项.您甚至可以编写一个单独的过程来将当前矩阵写入文本文件或屏幕备忘录,如果这些过于限制您想要查看的内容.这是一个非常简单的案例,但是当您查看更复杂的系统时,它将提供使用调试器的良好体验. (3认同)
  • @Byakugan - 正确但这与矩阵本身没什么关系,但更多的是嵌套for循环.fyi:使用两个for循环填充矩阵,其最佳*(性能明智)*逐行填充*(正如您所做)*.逐行填充,你有内存对齐的优势.逐列填充会有很多缓存未命中和更糟糕的性能. (2认同)

Dav*_*nan 5

这个问题与矩阵和Delphi本身无关.相反,它只是嵌套for循环.

我将告诉你如何为自己解决这个问题.创建这个简单的控制台应用

program NestedLoops;

procedure Main;
var
  i, j: Integer;
begin
  for i := 1 to 5 do
    for j := 1 to 5 do
    begin
      Write('i=');
      Write(i);
      Write(' j=');
      Write(j);
      Writeln;
    end;
end;

begin
  Main;
end.
Run Code Online (Sandbox Code Playgroud)

你会看到这样的输出:

i=1 j=1
i=1 j=2
i=1 j=3
i=1 j=4
i=1 j=5
i=2 j=1
i=2 j=2
....
Run Code Online (Sandbox Code Playgroud)

没有运行代码也很容易预测这一点.想一想:

  • i循环是外循环.在第一次迭代中,我是1.
  • 然后内循环运行,并运行完成.所以我们的j值分别为1,2,3,4和5,而我们仍处于i = 1,这是第一个外循环迭代.
  • 然后我们有第二个外循环迭代,i = 2,以及一组全新的内循环j值.
  • 等等剩下的外循环i迭代.