对delphi循环有点帮助

时间:2008-12-16 21:31:26

标签: delphi

 for m := 0 to 300 do
       if Pos(certain_String, string(arrayitem(m)) <> 0 then
        begin
          randomize;
          x := random(100);
        begin
            case x of
             0..69  : function(m); //  70 percent
            70..79 : function(m+1); // 10 percent
            80..84 : function(m+2); // 5 percent
            85..88 : function(m+3); //  5 percent
            89..91 : function(m+4); //  2 percent
            92..94 : function(m+5); //  3 percent
            95..97 : function(m+6); //  3 percent
            98..98 : function(m+7); //  1 percent
            99..99 : function(m+8); //  1 percent


           end;
           m := 300;

    end;

试图让这个东西循环通过一个相当大的数组,但如果它找到一个特定的字符串,它完全停止并转到下一个东西,不得不取出一些专有的函数名称,但m:= 300;似乎是问题,不喜欢我在for循环中间分配m值。对不起,这里缺乏知识,我的膝盖上放了一个半开的帕斯卡项目,从来没有见过这些东西。

4 个答案:

答案 0 :(得分:3)

稍微更改了代码:

randomize;
for m := 0 to 300 do begin
  if Pos(certain_String, string(arrayitem(m)) <> 0 then begin
    x := random(100);
    case x of
       0..69 : function(m); //  70 percent
      70..79 : function(m+1); // 10 percent
      80..84 : function(m+2); // 5 percent
      85..88 : function(m+3); //  5 percent
      89..91 : function(m+4); //  2 percent
      92..94 : function(m+5); //  3 percent
      95..97 : function(m+6); //  3 percent
          98 : function(m+7); //  1 percent
          99 : function(m+8); //  1 percent
    end;
    break;
  end;
end;

会做的伎俩。

不应该为每个循环调用Randomize。

为什么要播放字符串?

答案 1 :(得分:3)

除了其他问题,结束for循环的方法是 Break 。只需将 m:= 300; 替换为 Break; ,它就可以完成您想要的操作。

另外一次调用随机数是一个坏主意,但是你知道现在已经在answer you accepted yesterday中提到了这个问题。

答案 2 :(得分:0)

在Object Pascal中必须有一个等价于C break的东西。这是摆脱循环的一种更清洁的方式。

答案 3 :(得分:0)

while循环示例:

m := 0;

while m<=300 do begin
  if condition do begin
    // Do something

    m := 300; // Will be 301 at end of loop.
  end;
  Inc(m);
end;