我有一个无限循环

Maw*_*awg 0 delphi

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

mgi*_*uca 7

你把它保持在24到40之间是什么意思?你的条件" until (newValue > 24) and (newValue < 40)"暗示一旦它在那个范围内就会停止; 如果超出该范围,它将永远存在.

它终止的可能性取决于oldValue.你期望oldValue得到什么价值?

在任何情况下,都不保证这样的循环终止.您每次都会随机更改数字,因此无法保证它会完全进入终止范围.特别是,-1和1之间的大量随机数全部加在一起通常总和大约为0,因此您不能指望该数字随时间发生显着变化.可能的情况是它永远不会进入该范围.