当前位置:  开发笔记 > 编程语言 > 正文

Delphi(2006)Loop Help

如何解决《Delphi(2006)LoopHelp》经验,为你挑选了2个好方法。

所以我实际上要做的是在70%的时间内发生一些事情,如果有意义的话,另外一些事情发生在10%的时间,但我的应用似乎没有做我正在猜测的任何行动无论如何,如果有人可以看看并且可能给我一些建议,我会误解循环语法或其他东西

per1 := 70;
per2 := 77;
per3 := 84;
per4 := 91;
per5 := 100;
per6 := Random(2) + 1;
randomize;
RandPer:= Random(100);
randomize;
RandPer2 := Random(100);

 if RandPer2 <= 70 then begin
If RandPer <= per1 then begin
  Functiontest(1);
    end Else If RandPer <= per2 then begin
      Functiontest(3);
     end Else begin If RandPer <= per3 then begin
      Functiontest(5);
        end Else begin  If RandPer <= per4 then begin
        Functiontest(6);
          end Else begin If RandPer <= per5 then begin
          Functiontest(9);
          end;
         end;
        end;
      end;

Rob Kennedy.. 6

你没有任何循环语法,所以这肯定是你混淆的可能来源.

不要Randomize多次打电话.它会在每次执行时重新初始化随机种子,这取决于系统时钟.如果你的代码运行得比时钟提前快,那么你的几次调用Randomize实际上会将随机种子重置为之前的相同值,从而导致重复Random调用返回相同的值.

帮助建议您Randomize在程序开始时只调用一次.如果您正在编写一个单元或组件,并且您不负责整个程序,那么根本不要打电话Randomize.相反,请记录代码的使用者应该自己调用它.

如果您正在编写DLL而不使用运行时包,则调用RandomizeDLL导出的初始化函数; DLL的使用者将无法访问DLL的Delphi运行时库副本.

此外,如果您希望在70%的时间内发生某些事情,那么您应该检查您的值是否严格小于 70.可能的返回值Random包括零; 70%的结果将介于0和69之间.允许70实际上会使事件在71%的时间内发生.

最后,你10%的时间计算对我来说没有意义.你有三个事件将在7%的时间内发生,而一个事件将在9%的时间内发生.当你只有30%的剩余时间时,你不可能有四个事件发生在10%的时间.你是说每个事件的频率是独立于其他事件来衡量的吗?如果是,那么不要将所有条件测试链接在一起else; if每个都使用完全单独的声明.



1> Rob Kennedy..:

你没有任何循环语法,所以这肯定是你混淆的可能来源.

不要Randomize多次打电话.它会在每次执行时重新初始化随机种子,这取决于系统时钟.如果你的代码运行得比时钟提前快,那么你的几次调用Randomize实际上会将随机种子重置为之前的相同值,从而导致重复Random调用返回相同的值.

帮助建议您Randomize在程序开始时只调用一次.如果您正在编写一个单元或组件,并且您不负责整个程序,那么根本不要打电话Randomize.相反,请记录代码的使用者应该自己调用它.

如果您正在编写DLL而不使用运行时包,则调用RandomizeDLL导出的初始化函数; DLL的使用者将无法访问DLL的Delphi运行时库副本.

此外,如果您希望在70%的时间内发生某些事情,那么您应该检查您的值是否严格小于 70.可能的返回值Random包括零; 70%的结果将介于0和69之间.允许70实际上会使事件在71%的时间内发生.

最后,你10%的时间计算对我来说没有意义.你有三个事件将在7%的时间内发生,而一个事件将在9%的时间内发生.当你只有30%的剩余时间时,你不可能有四个事件发生在10%的时间.你是说每个事件的频率是独立于其他事件来衡量的吗?如果是,那么不要将所有条件测试链接在一起else; if每个都使用完全单独的声明.



2> dmajkic..:

我只是修改了CharlesF代码来做你需要的.希望CharlesF不介意.

begin
  randomize;
  for i := 0 to NumberOfTimesNeed do
  begin
    R :=  Random(100);
    case R of 
       0..69  : Functiontest(1); // this will fire 70% of NumberofTimes
       70..79 : Funciotntest(2); // 10 percent 
       80..89 : Funciotntest(3); // 10 percent 
       90..94 : Funciotntest(4); //  5 percent  
       // and so on ...
    end; 
end;

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有