全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1151
推到 Plurk!
推到 Facebook!

關於跳脫迴圈的問題??

答題得分者是:shaofu
sanhang
一般會員


發表:12
回覆:25
積分:17
註冊:2002-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-09 16:48:40 IP:210.68.xxx.xxx 未訂閱
大概的程式碼如下:
while MyQuery.Eof do
begin      for i:=0 to Father.Sons.Count - 1 do
  begin
    for j:=0 to Father.Sons[i].NamesList.Count - 1 do
    begin
      if (Father.Sons[i].NamesList.String[j]='Jack') then
      begin
        break;
      end;      
    end;
    if (Father.Sons[i].NamesList.String[j]='Jack') then
    begin
      break;
    end;  
  end;
  
  if (Father.Sons[i].NamesList.String[j]='Jack') then
  begin
    Continue;
  end;
  
  .......
  .......    end;
我要在兩個for迴圈中判斷是否在while迴圈中下Continue 而上面的if條件式(Father.Sons[i].NamesList.String[j]='Jack')都是一樣的敘述 這樣寫起來很長重複地方有很多,有沒有可以改善的空間呢?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-09 17:40:14 IP:211.20.xxx.xxx 未訂閱
sanhang 你好    大概的修改一下程式碼:
Var
  lBreak : Boolean;
Begin
while MyQuery.Eof do // ???? 應該是 Not MyQuery.Eof  才對吧
begin
  lBreak := False;
  for i:=0 to Father.Sons.Count - 1 do
  begin
    for j:=0 to Father.Sons[i].NamesList.Count - 1 do
    begin
      if (Father.Sons[i].NamesList.String[j]='Jack') then
      begin
        lBreak := True;
        break;
      end;      
    end;
    if lBreak then
    begin
      break;
    end;  
  end;
  
  if lBreak then
  begin
    Continue;
  end;
  
  .......
  .......    end;
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-09 17:57:05 IP:210.243.xxx.xxx 未訂閱
1. Use goto
while MyQuery.Eof do
begin
  for i:=0 to Father.Sons.Count - 1 do
  begin
    for j:=0 to Father.Sons[i].NamesList.Count - 1 do
    begin
      if (Father.Sons[i].NamesList.String[j]='Jack') then
        goto JackFound;
    end;
    if (Father.Sons[i].NamesList.String[j]='Jack') then
      goto JackFound;
  end;  
  .......
  .......
  continue;  
  
  JackFound:    end; 
2. Use exception
while MyQuery.Eof do
begin
  try
    for i:=0 to Father.Sons.Count - 1 do
    begin
      for j:=0 to Father.Sons[i].NamesList.Count - 1 do
      begin
        if (Father.Sons[i].NamesList.String[j]='Jack') then
          raise Exception.Create('Jack Found');
      end;
      if (Father.Sons[i].NamesList.String[j]='Jack') then
        raise Exception.Create('Jack Found');
    end;  
    .......
    .......
  except
  end;
end; 
不過一般來說, 盡量不要把 code 寫得太深比較好
系統時間:2024-05-04 1:56:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!