newValue := oldValue;
repeat
delta := (RandomRange(0, 200) / 100) - 1;
newValue := newValue + delta;
until (newValue > 24) and (newValue < 40);
oldValue := newValue;
newValue2 := oldValue2;
repeat
delta := (RandomRange(0, 200) / 100) - 1;
newValue2 := newValue2 + delta;
until (newValue2 > 24) and (newValue2 < 40) and (newValue2 < newValue);
oldValue2 := newValue2;
Run Code Online (Sandbox Code Playgroud)
经过几次迭代后,这会在第二个循环中遇到无限循环.它意味着将Float随机地改变-1到+1并保持在24到40的范围内,同时仍然小于另一个以相同方式随机改变的Float.
谁可以先让我说"d'哦!"?(可能是(newValue2 < newValue))
D'哦!
嗯,现在有人指出,答案是显而易见的. newValue := oldValue + delta;,而不是'newValue:= newValue + delta;',以便代码读取(类似于两个循环)
newValue := oldValue;
repeat
delta := (RandomRange(0, 200) / 100) - 1;
newValue := oldValue + delta; <==== **NOT** newValue
until (newValue > 24) and (newValue < 40);
oldValue := newValue;
Run Code Online (Sandbox Code Playgroud)
全部谢谢,全部和很多+1
你把它保持在24到40之间是什么意思?你的条件" until (newValue > 24) and (newValue < 40)"暗示一旦它在那个范围内就会停止; 如果超出该范围,它将永远存在.
它终止的可能性取决于oldValue.你期望oldValue得到什么价值?
在任何情况下,都不保证这样的循环终止.您每次都会随机更改数字,因此无法保证它会完全进入终止范围.特别是,-1和1之间的大量随机数全部加在一起通常总和大约为0,因此您不能指望该数字随时间发生显着变化.可能的情况是它永远不会进入该范围.