線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2279
推到 Plurk!
推到 Facebook!

請教for迴圈問題

答題得分者是:deity
nomaid
一般會員


發表:6
回覆:9
積分:3
註冊:2004-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-24 13:59:14 IP:61.62.xxx.xxx 未訂閱
麻煩請各位大大指導    小弟今天想使用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-24 14:42:09 IP:61.71.xxx.xxx 未訂閱
這樣寫當然不成, 因為 Edit 是物件, 不可以直接以string方式表達 如下
procedure ....
   var aedit: Tedit;
begin
  for i:= 1 to 3 do begin     
     aedit:= TEdit(FindComponent('Edit' InttoStr(i)));<--此列為重點
     Pball[i]:= StrtoInt(aedit.text);
  end;
end;    
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-24 14:47:14 IP:218.5.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-24 14:47:35 IP:61.62.xxx.xxx 未訂閱
抱歉 是否能請大大解說一下? aedit:= TEdit(FindComponent(''Edit'' InttoStr(i))) 小弟看不大懂意思耶 是說 aedit = edit[i]嗎? 那如果是這樣的話 是要怎麼抓每個edit值呢 是使用 Pball[i]:= StrtoInt(aedit.text); 他就會去抓每個edit的值嗎? 那我前面的var 是否依舊照我所寫的 而不用修改 只要多宣告一個aedit = Tedit 即可呢?
nomaid
一般會員


發表:6
回覆:9
積分:3
註冊:2004-11-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-24 14:55:15 IP:61.62.xxx.xxx 未訂閱
是的 我在跑的時候 的確會陷入無窮迴圈~    我的意思就是 我有六個文字框要把它的數值存入變數內 所以我才設 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-24 14:57:39 IP:218.15.xxx.xxx 未訂閱
引言: 抱歉 是否能請大大解說一下? 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],而您又将其定义为数组小弟做了一个实例,不知是不是您所要的: < class="code"> 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; end; 运行结果为: Pball[1]:=1 Pball[2]:=2 Pball[3]:=3 Pball[4]:=4 Pball[5]:=5 Pball[6]:=6 将Edit1~Edit6的文字框内容,赋值给变数pball[1]~pball[6] ~~~行径窄处,留一步与人行~~~
nomaid
一般會員


發表:6
回覆:9
積分:3
註冊:2004-11-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-24 15:33:19 IP:61.62.xxx.xxx 未訂閱
嗯~ 我依照大大您的寫法去測了一次 他會跑出 這行有問題 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],而您又将其定义为数组小弟做了一个实例,不知是不是您所要的: < class="code"> 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; end; 运行结果为: Pball[1]:=1 Pball[2]:=2 Pball[3]:=3 Pball[4]:=4 Pball[5]:=5 Pball[6]:=6 将Edit1~Edit6的文字框内容,赋值给变数pball[1]~pball[6] ~~~行径窄处,留一步与人行~~~
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-24 15:50:44 IP:218.15.xxx.xxx 未訂閱
您好: 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-24 16:11:55 IP:218.5.xxx.xxx 未訂閱
依你的想法,提供一个做法(不知是否理解正确) 在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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-24 17:03:20 IP:61.62.xxx.xxx 未訂閱
不好意思 我現在又有個問題出現了.. 我發現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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-24 17:22:47 IP:220.130.xxx.xxx 未訂閱
之前在別的論壇貼的
 
程式分享;    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 來運算
樂透最適合不過了說.    
系統時間:2024-06-30 11:55:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!