Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何选择五个随机的非重复按钮并将它们复制到panel1?_Arrays_Delphi_Delphi 7 - Fatal编程技术网

Arrays 如何选择五个随机的非重复按钮并将它们复制到panel1?

Arrays 如何选择五个随机的非重复按钮并将它们复制到panel1?,arrays,delphi,delphi-7,Arrays,Delphi,Delphi 7,我有20个按钮,在程序启动时自动创建。如何选择五个随机的非重复按钮并将它们复制到Panel1组件 第一单元; 界面 使用 窗口、消息、系统工具、变体、类、图形、控件、窗体、, 对话框、stdctrl、extctrl; 类型 TForm1=classTForm 小组1:TPanel; 过程FormCreateSender:TObject; 私有的 {私有声明} 平民的 {公开声明} 终止 变量 表1:TForm1; 但是:TButton的数组[1..9]; 实施 {$R*.dfm} 过程TForm

我有20个按钮,在程序启动时自动创建。如何选择五个随机的非重复按钮并将它们复制到Panel1组件

第一单元; 界面 使用 窗口、消息、系统工具、变体、类、图形、控件、窗体、, 对话框、stdctrl、extctrl; 类型 TForm1=classTForm 小组1:TPanel; 过程FormCreateSender:TObject; 私有的 {私有声明} 平民的 {公开声明} 终止 变量 表1:TForm1; 但是:TButton的数组[1..9]; 实施 {$R*.dfm} 过程TForm1.FormCreateSsender:ToObject; 变量 i:整数; 开始 对于i:=1到20 do 开始 但是[i]:=TButton.CreateForm1; 但是[i]。父项:=Form1; 但是[i]。说明:=IntToStri; 但[i].Font.Size:=26; 但是[i]。宽度:=50; 但是[i]。高度:=50; 但是[i]。左:=50+圆形mod 3*但是[i]。宽度; 但是[i]。顶部:=50+圆形/3*但是[i]。高度; 终止 终止 终止
算法如下:

保留对数组中按钮的引用。 执行数组的统一洗牌,例如使用洗牌。 从数组中选择前5项。 如果您愿意,您可以通过在循环的5次迭代后中断洗牌来优化这一点,因为前5项已经由该点选择。但是,对于这样一个小的阵列,这可能不是必需的

Fisher-Yates的实现有很多,但是要注意,有很大一部分是错误实现的!正确的实现也比比皆是,例如在这里

对于此任务,您可能比使用spring4d库做得更糟

复制按钮时,创建新按钮并复制所需的属性。这项工作可能更容易理解为在1到20之间实际选择5个随机数,然后创建5个带有这些数字标题的按钮。同样,这只是一个数字的混乱


如果要将20个项目放入一个数组中,则需要确保该数组足够大。您的阵列可以容纳9项,但您尝试放入20项

算法如下:

保留对数组中按钮的引用。 执行数组的统一洗牌,例如使用洗牌。 从数组中选择前5项。 如果您愿意,您可以通过在循环的5次迭代后中断洗牌来优化这一点,因为前5项已经由该点选择。但是,对于这样一个小的阵列,这可能不是必需的

Fisher-Yates的实现有很多,但是要注意,有很大一部分是错误实现的!正确的实现也比比皆是,例如在这里

对于此任务,您可能比使用spring4d库做得更糟

复制按钮时,创建新按钮并复制所需的属性。这项工作可能更容易理解为在1到20之间实际选择5个随机数,然后创建5个带有这些数字标题的按钮。同样,这只是一个数字的混乱


如果要将20个项目放入一个数组中,则需要确保该数组足够大。您的阵列可以容纳9项,但您尝试放入20项

我建议您查看Delphi-7帮助,首先是算术运算符div和mod,然后是divmod过程。您可以省略现有的舍入函数。然后还要考虑一个小的变化,以计算左边和顶部的属性,改进按钮的布局。我建议你在Delphi -7帮助下,首先为算术运算符DIV和MOD,然后,DIVMOD程序。您可以省略现有的舍入函数。然后还考虑一个小的变化,以计算左和顶部属性的公式,以改善按钮的布局。