首页 > 解决方案 > 如何停止我的嵌套循环?它一遍又一遍地循环。我只想要 18 个结果而不是 81

问题描述

图片

var
  arrGame: array [1 .. 9, 1 .. 9] of char;
  arrPlanets: array [1 .. 9, 1 .. 9] of char;

implementation

{$R *.dfm}
{$R+}

procedure TfrmQ3.btnQ3_1StartGameClick(Sender: TObject);    
var
  i, j: integer;
  cGame: char; 
begin 
  btnQ2Play.Enabled := true;
  redQ3GameBoard.Clear; 
  redQ3incorrect.Clear; 
  for i := 1 to 9 do
  begin 
    for j := 1 to 9 do 
      arrGame[i,j] := '-'; 
  end; 

  for i := 1 to 9 do 
  begin
    for j := 1 to 5 do
    begin
      redQ3GameBoard.Lines.Add(arrGame[i,j]+ ' ' + arrGame[i,
        j] + ' ' + arrGame[i,j] + ' ' + arrGame[i,j] + ' ' + arrGame[i,
        j] + ' ' + arrGame[i,j] + ' ' + arrGame[i,j] + ' ' + arrGame[i,
        j] + ' ' + arrGame[i,j]);
    end; 
  end; 
end;

end.

左上角是我的代码生成的内容。我试图得到的结果在左下角。

如上所述的带有 IDE 的计算机屏幕照片

标签: delphimultidimensional-array2dnested-loops

解决方案


你基本上有这个代码:

for i = 1 to 9 do
  for j = 1 to 9 do
    List.Lines.Add(...)

该声明

List.Lines.Add(...)

将运行 9 × 9 = 81 次。由于此语句添加了一行,因此您将获得 81 行。(另外,每行有 9 个相同的值!例如,当 i = 4 和 j = 6 时,您将arrGame[4, 6]在该行上打印该值 9 次。你能看到是怎么回事吗?)

这是你逻辑上的缺陷。您只需要 9 行,但每行应包含 9 个组件。因此,您需要重新设计代码。

由于这似乎是家庭作业,因此我不会详细给您解决方案。相反,我会给你下面的命令行程序来学习:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

var
  Grid: array of array of Char;

const
  N = 9;

var
  i, j: Integer;
  s: string;

function GetRandomLetter: Char;
begin
  Result := Chr(Ord('A') + Random(Ord('Z') - Ord('A') + 1));
end;

begin

  try
    try

      Randomize;
      SetLength(Grid, N, N);

      // Build grid
      for i := 0 to N - 1 do
        for j := 0 to N - 1 do
          Grid[i, j] := GetRandomLetter;

      // Draw grid
      for i := 0 to N - 1 do
      begin
        s := Grid[i, 0];
        for j := 1 to N - 1 do
          s := s + #32 + Grid[i, j];
        Writeln(s);
      end;


    except
      on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
    end;
  finally
    Writeln('Press Return to exit.');
    Readln;
  end;

end.

程序输出的屏幕截图:一个 9×9 的大写字母网格。


推荐阅读