gpt4 book ai didi

Delphi Random 在低范围内返回零

转载 作者:行者123 更新时间:2023-12-03 18:18:47 25 4
gpt4 key购买 nike

我正在使用 delphi 7,我正在尝试将一组数字从一个列表框移到另一个列表框。

02H,02D,02S,02C,03H,03D,03S,03C,10H,10D,10S,10C,11H,11D,11S,11C,20H,20D,20S,20C,30H,30D,30S,30C .

但出于某种原因,30C 似乎总是在最后,当我随机选择 0,2 或 0,1 时,它似乎总是给我 0。

procedure TMainForm.btShuffleClick(Sender: TObject);
var I: integer;
begin
lstShufd.Clear;
while lstNew.Count <> 0 do
begin
Randomize;
I:=RandomRange(0,lstNew.Count-1);
lstShufd.Items.Add(lstNew.Items.Strings[I]);
lstNew.Items.Delete(I);
end;
end;

最佳答案

你有两个错误:

  1. 你不能调用 Randomize以你在问题中的方式重复。这样做会破坏随机序列的分布特性。典型用法是调用 Randomize在程序开始时一次。
  2. RandomRange返回值 IAFrom <= I < ATo 范围内.所以你传递了错误的参数。使用 RandomRange(0, lstNew.Count)甚至只是 Random(lstNew.Count) .

第二个错误解释了您观察到的行为。在您的代码中,通过调用 RandomRange(0, lstNew.Count-1)你得到一个在 0 <= I < lstNew.Count-1 范围内的值所以 lstNew 中的最后一项, 即索引为 lstNew.Count-1 的项目直到循环的最后一次迭代才能被选择。

RandomRange 的文档说:

function RandomRange(const AFrom, ATo: Integer): Integer;

Description

Returns a random integer from a specified range.

RandomRange returns a random integer from the range that extends between AFrom and ATo (non-inclusive). RandomRange can handle negative ranges (where AFrom is greater than ATo).

关于Delphi Random 在低范围内返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20799555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com