請教for迴圈問題 |
答題得分者是:deity
|
nomaid
一般會員 ![]() ![]() 發表:6 回覆:9 積分:3 註冊:2004-11-05 發送簡訊給我 |
麻煩請各位大大指導 小弟今天想使用for迴圈來寫一個
自動把文字框的數值存到變數裡面去~
可是卻出現了問題 麻煩請各位大大指導看是哪邊有問題
我的文字框有 edit1 ~ edit12
變數有 Pball1 ~ Pball6 以下是小弟的程式內容:
var Form1: TForm1; edit:array[1..12] of Tedit; checkbox:array[1..12] of TCheckbox; Pball :array[1..42] of integer; ball1 :array[1..6] of integer; procedure TForm1.Button2Click(Sender: TObject); var i : integer; begin for i = 1 to 6 do while form1.Edit[i].text > strtoint('') then begin Pball[i]:=strtoint(form1.edit[i].text) ; end; end; end;當我執行的時候 會跑出以下的錯誤訊息 請參照: [Error] a3906026.pas(159): For loop control variable must be simple local variable [Error] a3906026.pas(161): Undeclared identifier: 'Edit' [Error] a3906026.pas(163): Undeclared identifier: 'edit' [Error] a3906026.pas(163): 'END' expected but ')' found [Error] a3906026.pas(164): Incompatible types: 'Boolean' and 'procedure, untyped pointer or untyped parameter' [Error] a3906026.pas(165): Declaration expected but identifier 'form1' found [Error] a3906026.pas(167): '.' expected but ';' found [Warning] a3906026.pas(168): Text after final 'END.' - ignored by compiler 能否請各位大大告知該如何修正這些錯誤~@@" 因為小弟想了很久還是不知該如何修正~>"<~ 麻煩各位大大了 謝謝 發表人 - nomaid 於 2004/12/24 14:03:51 發表人 - nomaid 於 2004/12/24 14:57:35 |
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
fangwy
中階會員 ![]() ![]() ![]() 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin
for i = 1 6 i=i 1 do -->不明白你的意思,而且这样写似乎无法结束 while form1.Edit[i].text > strtoint('') then
begin
Pball[i]:=strtoint(form1.edit[i].text) ; -->edit不是form1的成员,直接使用edit[i]就可以,但我不明白你Edit数组的作用
end;
end;
end; 發表人 - fangwy 於 2004/12/24 14:54:23
|
nomaid
一般會員 ![]() ![]() 發表:6 回覆:9 積分:3 註冊:2004-11-05 發送簡訊給我 |
|
nomaid
一般會員 ![]() ![]() 發表:6 回覆:9 積分:3 註冊:2004-11-05 發送簡訊給我 |
是的 我在跑的時候 的確會陷入無窮迴圈~ 我的意思就是 我有六個文字框要把它的數值存入變數內
所以我才設 for i = 1 to 6 剛剛那個是我打錯了 真不好意思[:i]
已經重新編輯一次程式碼 煩請大大再幫我看一下~ 小弟這支程式 是為了寫樂透的投注程式~
因系統要求的是
1. 使用者自行輸入中獎號碼
2. 使用者自行輸入 六個自選號碼
然後比較看中幾個~
所以小弟才想說用這樣子的寫法
之後的要求還有
3.包牌 (蠻複雜的@@")以及電腦亂數產生然後比較的要求
不過因為小弟尚未寫到那邊 所以還沒開始說明
引言: procedure TForm1.Button2Click(Sender: TObject); var i : integer; begin for i = 1 to 6 do -->不明白你的意思,而且这样写似乎无法结束 while form1.Edit[i].text > strtoint('') then begin Pball[i]:=strtoint(form1.edit[i].text) ; -->edit不是form1的成员,i end; end; end; |
deity
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: 抱歉 是否能請大大解說一下? aedit:= TEdit(FindComponent(''Edit'' InttoStr(i))) 小弟看不大懂意思耶 是說 aedit = edit[i]嗎? 那如果是這樣的話 是要怎麼抓每個edit值呢 是使用 Pball[i]:= StrtoInt(aedit.text); 他就會去抓每個edit的值嗎? 那我前面的var 是否依舊照我所寫的 而不用修改 只要多宣告一個aedit = Tedit 即可呢?nomaid 您好: 着实不知道您的意思,按最初您的意思您的变数是Pball1 ~ Pball6而非Pball[1] ~ Pball[6],而您又将其定义为数组 |
nomaid
一般會員 ![]() ![]() 發表:6 回覆:9 積分:3 註冊:2004-11-05 發送簡訊給我 |
嗯~ 我依照大大您的寫法去測了一次
他會跑出 這行有問題
Memo1.Lines.Add(format(''Pball[%d]:=%d'',[i,Pball[i]])); 我有多加一個memo在上面
可是他會出現format 裡面這邊有問題
我把它改成
Memo1.Lines.Add(format('Pball[%d]:=%d',[i,Pball[i]]));
後 就可以跑了 可是不會秀在memo上耶 試問該如何解決呢? 請再麻煩大大了 謝謝
引言: nomaid 您好: 着实不知道您的意思,按最初您的意思您的变数是Pball1 ~ Pball6而非Pball[1] ~ Pball[6],而您又将其定义为数组 |
deity
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
您好:
Memo1.Lines.Add(format(''Pball[%d]:=%d'',[i,Pball[i]]));//
Memo1.Lines.Add(format('Pball[%d]:=%d',[i,Pball[i]]));
1、确保您Edit1~Edit6文本框存在,并里面在输入的是数字;
2、您可以直接拉Edit1~Edit6 6个文本框,一个Button1,一个Memo1至Form1中,双击Form1中的Button1,在Button1的onClick事件中将我上面所发代码复制进去,此代码,小弟测试已通过,您再仔细对比下。 ~~~行径窄处,留一步与人行~~~
|
fangwy
中階會員 ![]() ![]() ![]() 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
依你的想法,提供一个做法(不知是否理解正确)
在Form上加入6个TEdit,并将每个TEdit的Tag,依次序设置成0,1,2,3,4,5,然后放一个TButton,在其点击事件加入下面的代码.这段代码完成采集用户输入的6个号码.
var
Pball : array[0..5] of integer; //采集号码保存位置
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to Form1.ComponentCount -1 do
begin
if Form1.Components[i] is TEdit then
if Trim(TEdit(Form1.Components[i]).Text) <> '' then
Pball[TEdit(Form1.Components[i]).Tag] := StrToInt(Trim(TEdit(Form1.Components[i]).Text));
end;
end;
|
nomaid
一般會員 ![]() ![]() 發表:6 回覆:9 積分:3 註冊:2004-11-05 發送簡訊給我 |
不好意思 我現在又有個問題出現了..
我發現Pball[i]的值會亂跑
原本很正常的出現 Pball[1] ~ Pball[6]
現在卻從Pball[3] ~ Pball[6]出現 而且只出現這四個值
然後他們的值本來是edit3~ edit6的 結果變成讀到 edit1~ edit4
請問為什麼會這樣呢
之後我又用label去給他測一個一個的值 我側Pball[1]的時候 值是1 Pball[2]的值卻是14 然後Pball[3]~ Pball[6]就是我所輸入的edit1 ~ edit4的值...
請前輩們再幫我看一下 謝謝~ 程式碼沒改, edit也沒動
procedure TForm1.Button1Click(Sender: TObject); var i:integer; Pball:array[1..6] of integer; begin for i:=1 to 6 do if Self.Components[i] is TEdit then begin Pball[i]:=StrToInt(TEdit(Self.Components[i]).Text); //TEdit(Self.Components[i])意?找出所有TEdit此?的?件 Memo1.Lines.Add(format('Pball[%d]:=%d',[i,Pball[i]])); end; label1.Caption:=inttostr(Pball[2]); end; |
jow
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
之前在別的論壇貼的
程式分享; type TLotto = 1..42; TLottoSet = set of TLotto; TArrayOfLotto = array of TLotto; function GetRndLottoSet(ElementCount: Integer): TLottoSet; function LottoSetToStr(ASet: TLottoSet): string; function ElementsOfLottoSet(ASet: TLottoSet): TArrayOfLotto; function ElementCountOfLottoSet(ASet: TLottoSet): Integer; procedure GetAllLottoSets; procedure TEST; implementation function GetRndLottoSet(ElementCount: Integer): TLottoSet; var I: Integer; L: TLotto; begin Result := []; I := 0; repeat L := Random(MaxInt) mod 42 1; while L in Result do L := Random(MaxInt) mod 42 1; Result := Result [L]; Inc(I); until I = ElementCount; end; function LottoSetToStr(ASet: TLottoSet): string; var L: TLotto; begin Result := ''; for L := Low(L) to High(L) do if L in ASet then begin if Result = '' then Result := Format('%2.2d', [L]) else Result := Result ', ' Format('%2.2d', [L]); end; end; function ElementsOfLottoSet(ASet: TLottoSet): TArrayOfLotto; var I: Integer; L: TLotto; begin SetLength(Result, ElementCountOfLottoSet(ASet)); I := 0; for L := Low(L) to High(L) do if L in ASet then begin Result[I] := L; Inc(I); if I = Length(Result) then Break; end; end; function ElementCountOfLottoSet(ASet: TLottoSet): Integer; var L: TLotto; begin Result := 0; for L := Low(L) to High(L) do if L in ASet then Inc(Result); end; procedure GetAllLottoSets; //產生所有樂透號碼組 var F: TFIleStream; LS: TLottoSet; L0, L1, L2, L3, L4, L5: TLotto; begin if not FileExists('LottoSet.lotto') then begin F := TFileStream.Create('LottoSet.lotto', fmCreate); try for L0 := 1 to 37 do for L1 := L0 1 to 38 do for L2 := L1 1 to 39 do for L3 := L2 1 to 40 do for L4 := L3 1 to 41 do for L5 := L4 1 to 42 do begin LS := [L0, L1, L2, L3, L4, L5]; F.Write(LS, SizeOf(LS)); end; finally FreeAndNil(F); end; end; end; procedure TEST; var F: TFileStream; RndLS, LS: TLottoSet; Z: Integer; begin if FileExists('LottoSet.lotto') then begin Z := 0; RndLS := GetRndLottoSet(10); F := TFileStream.Create('LottoSet.lotto', fmOpenRead fmShareDenyNone); try F.Position := 0; repeat F.Read(LS, SizeOf(LS)); if ElementCOuntOfLottoSet(RndLS * LS) = 6 then Inc(Z); until F.Position >= F.Size; finally FreeAndNil(F); end; ShowMessage('猜猜看,我在Count啥???.....' IntToStr(Z)); end; end; 用 Delphi 的 set 來運算 樂透最適合不過了說. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |