对数组进行排序的自定义过程



我正在复习我的一份旧试卷,准备期末考试,为了热爱生活,我不知道该怎么做!该程序早些时候运行,但没有对数组进行排序。现在我得到一个错误说EAccess violation with message: access violation at address 00404BDE

这是我的代码(有点长,也许你可以帮我发现我的错误):

private
    { Private declarations }
    iCount : Integer;
    arrDams : array [1..200] of string;
    Procedure List;
    procedure Display;
    procedure Sort;
    procedure Search (sDam : String);
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Display;  //Display with Numbers
var
  k : Integer;
begin
  for K := 1 to 200 do
    begin
      RedOut.Lines.Add (IntToStr(k) + '.) ' + (arrDams[k]));
    end;
end;
procedure TForm1.FormCreate(Sender: TObject); // Create
begin
//
end;
procedure TForm1.List; // TextFile to array
var
  MyFile : TextFile;
  k : Integer;
begin
  If FileExists('Dams.txt') <> True
    then Application.Terminate;
  AssignFile (MyFile, 'Dams.txt');
  Reset(MyFile);
  For K := 1 to 200 do
    begin
      Readln(MyFile, arrDams[k])
    end;
end;
procedure TForm1.Search(sDam: String); // Search
begin
end;
procedure TForm1.Sort; // Sort;
var
  K,L : byte;
  sKeep : string;
begin
  for k := 1 to iCount -1 do
    begin
      for l := k + 1 to iCount do
        begin
          if arrDams[k] > arrDams[L] then
            begin
              sKeep := arrDams[k];
              arrDams[k] := arrDams[L];
              arrDams[L] := sKeep
            end;
        end;
    end;
end;
procedure TForm1.btnListClick(Sender: TObject);
begin
 List;
 Display;
end;
procedure TForm1.btnDisplayClick(Sender: TObject);
begin
  display;
  sort;
end; //<---------- ERROR OVER HERE!
end.

表单顶部有3个按钮,即Show listMake new textfile with listSort list alphabetically。我正在处理的按钮是对列表进行排序。这篇试卷说我必须制作一个sort procedure,并且必须在点击Sort Button时被调用。

感谢的任何建议/帮助

p.S.

你能给我指一个链接吗?他们在那里深入解释了"选择排序"——我对此没有逻辑。。

您没有初始化iCount。所以它是0。因此iCount-1就是-1。但是,循环变量使用Byte,一种无符号类型。现在,-1在被解释为无符号Byte时是255。如果您一直遵循这一点,则意味着您访问数组超出了范围。实际上,内部循环只执行一次,值l等于0k等于255

如果启用范围检查编译器选项,那么在数组结束时就会遇到运行时错误。

假设您想将iCount初始化为某个值。我说不清是什么,但你会知道的。

除此之外,停止对循环变量使用无符号类型。将Byte替换为Integer

最新更新