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值。对不起,这里缺乏知识,我的膝盖上放了一个半开的帕斯卡项目,从来没有见过这些东西。
答案 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;