如何簡化雙重判斷 |
答題得分者是:P.D.
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
[code delphi] Rush:string; RuNO:Integer; Rush:=COPY((QUERY2.FIELDBYNAME('沖肖').ASSTRING),0,4); if Rush = '鼠' Then begin RuNO:= 9; end; if Rush = '牛' Then begin RuNO:= 8; end; if Rush = '虎' Then begin RuNO:= 7 end; if Rush = '兔' Then begin RuNO:= 6; end; if Rush = '龍' Then begin RuNO:= 5; end; if Rush = '蛇' Then begin RuNO:= 4; end; if Rush = '馬' Then begin RuNO:= 3; end; if Rush = '羊' Then begin RuNO:= 2; end; if Rush = '猴' Then begin RuNO:= 1; end; if Rush = '酉' Then begin RuNO:= 12; end; if Rush = '狗' Then begin RuNO:= 11; end; if Rush = '豬' Then begin RuNO:= 10; end; ------------------------------------------------------------------>>>>以下是想簡化片段程式 const cCompoundWordsKnam:String='鼠牛虎兔龍蛇馬羊猴雞狗豬'; if Pos(PChar(Rush),PChar(cCompoundWordsKnam))>0 then ShowMessage('沖肖吻合'); end; [/code] 請教各位前輩,小弟想把這種判斷方式簡化,是有運用上列,中間有吻合的沖肖要給值,就不瞭解如何加在程式內達成,請各位大大們指導!謝謝!! |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
1. 使用 pos 是可以的
2. 你的 if 中定義 runno, 但在你想簡化的過程中, 完全沒有 runno 的出現, 不知這個 runno你是要做什麼用? 3. 你的生肖與 runno 沒有一個順序的排列, 這其中不知道是如何規劃的? 4. 你的 copy(..., 0, 4), 但你的if rush卻又是2chars, 不懂, 後兩個 char 是什麼? 5. 最重要的是, 你想要簡化的結果是什麼? 是判斷, 還是要指定 runno 值? ===================引 用 K1086 文 章=================== [code delphi] Rush:string; RuNO:Integer; Rush:=COPY((QUERY2.FIELDBYNAME('沖肖').ASSTRING),0,4); if Rush = '鼠' Then begin RuNO:= 9; end; if Rush = '牛' Then begin RuNO:= 8; end; if Rush = '虎' Then begin RuNO:= 7 end; if Rush = '兔' Then begin RuNO:= 6; end; if Rush = '龍' Then begin RuNO:= 5; end; if Rush = '蛇' Then begin RuNO:= 4; end; if Rush = '馬' Then begin RuNO:= 3; end; if Rush = '羊' Then begin RuNO:= 2; end; if Rush = '猴' Then begin RuNO:= 1; end; if Rush = '酉' Then begin RuNO:= 12; end; if Rush = '狗' Then begin RuNO:= 11; end; if Rush = '豬' Then begin RuNO:= 10; end; ------------------------------------------------------------------>>>>以下是想簡化片段程式 const cCompoundWordsKnam:String='鼠牛虎兔龍蛇馬羊猴雞狗豬'; if Pos(PChar(Rush),PChar(cCompoundWordsKnam))>0 then ShowMessage('沖肖吻合'); end; [/code] 請教各位前輩,小弟想把這種判斷方式簡化,是有運用上列,中間有吻合的沖肖要給值,就不瞭解如何加在程式內達成,請各位大大們指導!謝謝!! |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
===================引 用 P.D. 文 章=================== 1. 使用 pos 是可以的 2. 你的 if 中定義 runno, 但在你想簡化的過程中, 完全沒有 runno 的出現, 不知這個 runno你是要做什麼用? 3. 你的生肖與 runno 沒有一個順序的排列, 這其中不知道是如何規劃的? 4. 你的 copy(..., 0, 4), 但你的if rush卻又是2chars, 不懂, 後兩個 char 是什麼? 5. 最重要的是, 你想要簡化的結果是什麼? 是判斷, 還是要指定 runno 值? ===================引 用 K1086 文 章=================== [code delphi] Rush:string; RuNO:Integer; Rush:=COPY((QUERY2.FIELDBYNAME('沖肖').ASSTRING),0,4); if Rush = '鼠' Then begin RuNO:= 9; end; if Rush = '牛' Then begin RuNO:= 8; end; if Rush = '虎' Then begin RuNO:= 7 end; if Rush = '兔' Then begin RuNO:= 6; end; if Rush = '龍' Then begin RuNO:= 5; end; if Rush = '蛇' Then begin RuNO:= 4; end; if Rush = '馬' Then begin RuNO:= 3; end; if Rush = '羊' Then begin RuNO:= 2; end; if Rush = '猴' Then begin RuNO:= 1; end; if Rush = '酉' Then begin RuNO:= 12; end; if Rush = '狗' Then begin RuNO:= 11; end; if Rush = '豬' Then begin RuNO:= 10; end; ------------------------------------------------------------------>>>>以下是想簡化片段程式 const cCompoundWordsKnam:String='鼠牛虎兔龍蛇馬羊猴雞狗豬'; if Pos(PChar(Rush),PChar(cCompoundWordsKnam))>0 then ShowMessage('沖肖吻合'); end; [/code] 請教各位前輩,小弟想把這種判斷方式簡化,是有運用上列,中間有吻合的沖肖要給值,就不瞭解如何加在程式內達成,請各位大大們指導!謝謝!! >>>>謝謝 PD版主的提示, 關於 runno 確實是要對應 cCompoundWordsKnam:String='鼠牛虎兔龍蛇馬羊猴雞狗豬' runno 的值是給9 runno 的值是給8 以此類推 ,每次抓會因輸入日期而改變沖肖,抓到什麼沖肖就給runno什麼值,值的排列順序是這樣→ '987654321121110' 希望各位大大前輩指導,謝謝!! |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
簡化程式不代表程式優化, 只是把程式碼少寫一些, 也不代表只有一種寫法, 我提供一種
定義一個常式 在 interface 下 const runary : array[0..11] of integer = (9,8,7,6,5,4,3,2,1,12,11,10) const cCompoundWordsKnam:String='鼠牛虎兔龍蛇馬羊猴雞狗豬'; implementation ... RuNO:Integer; rushno: integer; Rush:=COPY((QUERY2.FIELDBYNAME('沖肖').ASSTRING),0,2); rushno:= Pos(Rush,cCompoundWordsKnam); // 傳回 rush 在 cCompoundWordsKnam的位置 // rushno = 0 代表找不到 // 注意, 如果是xe系列, 已改成 = -1 找不到, 找到的話起始值是0 // dephi 系列, 找不到是0, 找到是由 1 開始 // 所以有找到的話, 回傳值一定是 1,3,5,7,9,11...(2bytes) // 1 代表陣列0, 3代表陣列1 if rushno > 0 then begin runno := (rushno - 1) - ((rushno -1) div 2); runno := runary[runno]; ShowMessage('沖肖吻合'); end; ps. 以上程式沒有在實體上運作過, 所以不保證可運行成功
編輯記錄
P.D. 重新編輯於 2016-09-12 01:31:06, 註解 無‧
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
===================引 用 P.D. 文 章=================== 簡化程式不代表程式優化, 只是把程式碼少寫一些, 也不代表只有一種寫法, 我提供一種 定義一個常式 在 interface 下 const runary : array[0..11] of integer = (9,8,7,6,5,4,3,2,1,12,11,10) const cCompoundWordsKnam:String='鼠牛虎兔龍蛇馬羊猴雞狗豬'; implementation ... RuNO:Integer; rushno: integer; Rush:=COPY((QUERY2.FIELDBYNAME('沖肖').ASSTRING),0,2); rushno:= Pos(Rush,cCompoundWordsKnam); // 傳回 rush 在 cCompoundWordsKnam的位置 // rushno = 0 代表找不到 // 注意, 如果是xe系列, 已改成 = -1 找不到, 找到的話起始值是0 // dephi 系列, 找不到是0, 找到是由 1 開始 // 所以有找到的話, 回傳值一定是 1,3,5,7,9,11...(2bytes) // 1 代表陣列0, 3代表陣列1 if rushno > 0 then begin runno := (rushno - 1) - ((rushno -1) div 2); runno := runary[runno]; ShowMessage('沖肖吻合'); end; ps. 以上程式沒有在實體上運作過, 所以不保證可運行成功 ===========>>>感謝PD版主的熱心指導,小弟有實際套入程式運作,是OK的 只是剛剛在 RUN 時,runo := runary[runo]; runo := runary[runo]; 就完全正確了,感謝 PD版主,同時也感謝本版所有熱心指導的前輩們,小弟就把得分者給PD版主了。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |