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

【問題】button~受詛咒的第六下

尚未結案
saiacade
一般會員


發表:2
回覆:5
積分:1
註冊:2005-06-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-15 21:14:29 IP:220.131.xxx.xxx 未訂閱
當在執行程式的時後~button點六下會當掉= =?! var Form1: TForm1; RandomNumber: array[1..38] of integer; procedure TForm1.Button1Click(Sender: TObject); var i,j,k: integer; begin k:=60; Randomize; for i := 1 to 7 do begin repeat j := Random(38) 1; until RandomNumber[j] = 0; RandomNumber[j] := 1; Form1.Canvas.TextOut(k,180,(Format('%.2d', [j]))); k:=k 30; end; end; 這是一個樂透彩的程式~可以run~但是如果按第六下的button~就當掉了~! 我試過RandomNumber[j] := 1;~這一行不寫的話就不會當了~ 但是不寫那一行的話~所出現的亂數值會重覆~! 我要寫的程式是樂透~所以不應該有重覆的~ 請問哪裡有問題呢?! 謝謝!
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-15 21:38:37 IP:219.68.xxx.xxx 未訂閱
您好: 說實在話,我看不懂您的程式在寫甚麼..不曉得您repeat裡是要幹嗎的,感覺是多此一舉。 我改了一下
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k: integer;
begin
k:=60;
Randomize;
for i := 1 to 7 do
 begin
  j := Random(38)   1;
  RandomNumber[i]:=j;
  Form1.Canvas.TextOut(k,180,(Format('%.2d',[j])));
  k:=k 30;
 end;
end;
saiacade
一般會員


發表:2
回覆:5
積分:1
註冊:2005-06-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-15 21:48:58 IP:220.131.xxx.xxx 未訂閱
您好~非常感謝您的教導~! 我發現了~雖然你幫我改了程式碼~當機的問題沒了~ 但是~重點在於~會有號碼重覆> <"~!! 你試著多跑幾次看看吧!! 謝謝!
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-15 22:10:33 IP:210.66.xxx.xxx 未訂閱
引言: 但是~重點在於~會有號碼重覆> <"~!!
亂數本來就會有重複的情況呀。 你要自己在拿到亂數後。查一下前面是不是已經出過了。 出過了要再產生一次。
saiacade
一般會員


發表:2
回覆:5
積分:1
註冊:2005-06-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-15 22:14:28 IP:220.131.xxx.xxx 未訂閱
版主~有點難以理解你說的話~可不可以具體的用程式教導一下 因為~我想~在我最上面的那個程式碼~我已經試過了~ 不會有號碼重覆~ 但~重點就在於按到第六次button的時後~電腦會當掉!
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-15 22:19:03 IP:59.104.xxx.xxx 未訂閱
引言: 當在執行程式的時後~button點六下會當掉= =?! var Form1: TForm1; RandomNumber: array[1..38] of integer; //<--陣列數38個 procedure TForm1.Button1Click(Sender: TObject); var i,j,k: integer; begin k:=60; Randomize; for i := 1 to 7 do begin repeat j := Random(38) 1; until RandomNumber[j] = 0; RandomNumber[j] := 1; 每個取得一個時,設定一個陣列數為1,若當數量達38個以上時,會產生何種情形? Form1.Canvas.TextOut(k,180,(Format('%.2d', [j]))); k:=k 30; end; end; 這是一個樂透彩的程式~可以run~但是如果按第六下的button~就當掉了~! 我試過RandomNumber[j] := 1;~這一行不寫的話就不會當了~ 但是不寫那一行的話~所出現的亂數值會重覆~! 我要寫的程式是樂透~所以不應該有重覆的~ 請問哪裡有問題呢?! 謝謝!
總結:RandomNumber陣列未在初始時歸0, 所以當執行6次時須要6*7個陣列數,當陣列為38個,執行在第6次的廻圈,每個陣列都為1,所以造成無窮回圈了,小心小心~~ 在程式前面加個陣列歸0吧 ZeroMemory(@RandomNumber,Sizeof(RandomNumber)); 發表人 - jest0024 於 2005/06/15 22:21:29
saiacade
一般會員


發表:2
回覆:5
積分:1
註冊:2005-06-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-15 22:43:33 IP:220.131.xxx.xxx 未訂閱
感謝~jest0024的熱情教導~ 不過我想在問你~你說要放在程式前面加個陣列歸0吧~ 歸0的這行~ ZeroMemory(@RandomNumber,Sizeof(RandomNumber)); 我應該把他擺在哪邊啊~幾乎可以放的位置都試過了~但是會有數字重覆出現= =!
shieh2700
高階會員


發表:0
回覆:127
積分:100
註冊:2002-06-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-16 01:55:58 IP:61.229.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject);
var
  ns : array[0..37] of integer;
  i,j,k: integer;
begin
  Randomize;
  for i := 0 to 37 do
    ns[i] := i 1;
  for i := 1 to 6 do begin
    k := Random(37);
    j := ns[i];
    ns[i] := ns[k];
    ns[k] := j;
  end;
  for i := 1 to 6 do
    Memo1.Text := Memo1.Text   intToStr(ns[i]) ' ';
  Memo1.Text := Memo1.Text   #13#10;
end;
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-16 20:13:26 IP:59.104.xxx.xxx 未訂閱
引言: 感謝~jest0024的熱情教導~ 不過我想在問你~你說要放在程式前面加個陣列歸0吧~ 歸0的這行~ ZeroMemory(@RandomNumber,Sizeof(RandomNumber)); 我應該把他擺在哪邊啊~幾乎可以放的位置都試過了~但是會有數字重覆出現= =!
1.我是針對你程式,提出你可能會出錯的地方。 2.你的重覆是啥意思?是指按一次7個數字有重覆?或是按6次裡頭會出現重複?
saiacade
一般會員


發表:2
回覆:5
積分:1
註冊:2005-06-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-16 20:20:13 IP:220.131.xxx.xxx 未訂閱
原本的程式~雖然因為沒有設到規零~所以會當掉~! 但是原本的程式~跑出來的話~不會有數字重復~! (也有可能我run太少次了~剛好都沒有重復的) 不過我加了你那一行規零後~ 我確發現~有時後run的時後就會有重復的號碼出線 ps.按一次button~出現六個號碼~如果有數字重復出現~是錯的! 不過我用另一個辦法解決了~! 就是加↓ FillChar(RandomNumber, SizeOf(RandomNumber), 0); 就行了~謝謝你了!
系統時間:2024-06-01 22:48:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!