关于数组的认识01 - 零基础入门学习Delphi 015
感觉delphi的数组比python的list差多了,只能是相同类型的元素,大概静态语言都只能这样吧。数组分为静态数组和动态数组。数组有一维、二维和多维数组。静态数组定义:
1) 先定义类型再定义数组:
Type
数组名 = Array[下标类型] of 基类型;
例如:
Type
Number = Array of Integer;
下标类型有整型、字符型、布尔型、子界型和枚举型。
基类型可以是任何类型。
下标类型和基类型为高级类型时需事先声明。
Var
Num_one : Number;
2) 直接定义数组:
Var
Num_one : Array of Integer;
引用元素,Num_one
Delphi的数组下标多以1开始,为了与C和python相同,我一般以0起始。但delphi的起始值很混乱,如copy是从1开始计算的。
Edit的文本居中的代码是:
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_CENTER);
Edit1.invalidate;
但这次小甲鱼采用的是
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_CENTER);
Edit1.refresh;
我感觉refresh更好理解些。
例题:随机产生10个2位整数,放入一维数组,找出最大值和最大值的下标。
procedure TForm1.Button1Click(Sender: TObject);
var
i, max, max_i: Integer;
num: Array of Integer;
begin
randomize; //初始化随机数种子
edit1.Text:= '';
edit2.Text:= '';
edit3.Text:= '';
for i:=0 to 9 do
begin
num:= 10 + random(90);
edit1.Text:= edit1.Text + IntToStr(num) + ','; //本行和下面+2行将数组的值用逗号隔开,这比python的join麻烦多了。
end;
edit1.Text:= copy(edit1.Text, 1, length(edit1.Text) - 1);
max:= num;
max_i:= 0;
for i:= 1 to 9 do
if max < num then
begin
max:= num;
max_i:= i;
end;
edit2.text:= IntToStr(max);
edit3.text:= IntToStr(max_i + 1);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_CENTER);
//Edit1.invalidate;
Edit1.refresh;
SetWindowLong(Edit2.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_CENTER);
Edit2.refresh;
SetWindowLong(Edit3.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_CENTER);
Edit3.refresh;
end;
该程序可能会遇到以下问题:
产生的随机数会重复(A,B,C,C,D...)),而,Edit3只显示第一个重复的数字下标(3)。 {:10_279:}
页:
[1]