【問題】button~受詛咒的第六下 |
尚未結案
|
saiacade
一般會員 發表:2 回覆:5 積分:1 註冊:2005-06-14 發送簡訊給我 |
當在執行程式的時後~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 發送簡訊給我 |
您好:
說實在話,我看不懂您的程式在寫甚麼..不曉得您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 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
saiacade
一般會員 發表:2 回覆:5 積分:1 註冊:2005-06-14 發送簡訊給我 |
|
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
引言: 當在執行程式的時後~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 發送簡訊給我 |
|
shieh2700
高階會員 發表:0 回覆:127 積分:100 註冊:2002-06-13 發送簡訊給我 |
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 發送簡訊給我 |
|
saiacade
一般會員 發表:2 回覆:5 積分:1 註冊:2005-06-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |