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

问题描述 投票:-3回答:1

image

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.

左上角是我的代码产生的结果。我想得到的结果在左下角。

Photo of computer screen with IDE as described above

delphi multidimensional-array 2d nested-loops
1个回答
0
投票

基本上你有这样的代码。

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

语句

List.Lines.Add(...)

将运行9×9=81次。由于这个语句增加了一行,所以你将得到81行。(而且,每行都有九个相同的值! 例如,当 i = 4 和 j = 6 时,你将打印出数值为 arrGame[4, 6] 九次在那一排。你能看出是怎么一回事吗)。)

这就是你逻辑上的缺陷。你只想要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.

Screenshot of program output: a 9-by-9 grid of capital letters.

© www.soinside.com 2019 - 2024. All rights reserved.