随机数问韪!分数100分在这里(http://www.delphibbs.com/delphibbs/dispq.asp?lid=3625982) ( 积分:

  • 主题发起人 主题发起人 hying95
  • 开始时间 开始时间
H

hying95

Unregistered / Unconfirmed
GUEST, unregistred user!
随机数问韪!分数100分在这里(http://www.delphibbs.com/delphibbs/dispq.asp?lid=3625982) ( 积分: 0 )<br />代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
i, j : integer;
K: Array [1..160] of integer;
NumCount: integer;
begin
memo1.Clear;
for i := 1 to 160 do
K := i;
NumCount := 49;
Randomize;
while memo1.Lines.Count<7 do
begin
j:= random(NumCount);
if length(inttostr(K[j]))>2 then
continue;//如果没有这句会出现大于49(13972792);为什么会出现这种情况?
memo1.Lines.Add(inttostr(K[j]));
K[j] := K[NumCount-1];
NumCount := NumCount-1;
end;
end;
为什么会出现大于49的情况(都是13972792)?
第二,连续按这个按纽会出如下错误,运行终止!
工程Project2.exe检测到错误类EAccessViolation错误信息:存取地址00403E94,违例了发生在模块Project2.exe中,读 在地址00000028里,进程中止。
 
晚上来看,希望能有人回答帮助我!
 
你的数组从1开始,而random(NumCount)可能出现0,越界了!就是说你取到K[0]了,不可预测的数。可能在你的机器上就是13972792。
 
j:= random(NumCount);应改为j:= random(NumCount)+1;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
843
import
I
I
回复
0
查看
806
import
I
后退
顶部