为什么这个for循环是无限的?
我有这样的循环,当步骤是(0; 1)它变得无限。如果step是[1; ..),那效果很好。为什么这个for循环是无限的?
public interface FindMinI {
double function(double x);
static double findMinOfFuncOnInterval(int begin, int end, double step, FindMinI func)
{
double min = Double.MAX_VALUE;
for (int i = begin; i <= end ; i += step) {
if(func.function(i) <= min)
min = func.function(i);
}
return min;
}
}
如果用(0,1)
之间一步尝试,这将被铸造增加i
时,结果为int,你会在每一次迭代,这将导致无限循环添加0
到i
!
这将是无限的,因为如果step
是然后加入零到我会做什么。不增加意味着无限循环。
任何一步是0或0.001或0.5,循环变得无限 – RaiseLtwiCe
@RaiseLtwiCe再次,你怎么能有*作为一个整数?*将0.5转换为一个int值会发生什么? –
如果step是0,那么您将0添加到i
这意味着没有任何内容被添加到该值,并且它会被限制为无限。
由于您将步骤提供为double,所以可能具有0.0001的值。然而,由于i
是转换从双到int制成的整数,和0.0001 - > 0。当你施放的值这是小于1和大于0为一个整数,它变为0。
i
变化到double
,您可以使用十进制值进行增加。
或者,你可以改变step
到int
,但你将无法使用在这种情况下
类似的情况十进制步骤也可以使用乘除发现证明双例如:
(int) (500 * 0.0001) -> 0.05 as an integer = 0
所以,当你(一个专门十进制值)加上一个双步用十进制值的整数,步变为0
,0
添加到i
,并且变得无限大。
@Aominè也许,但如果OP想要增加一个小数,将它改为double(或float)是唯一的方法 – Zoe
如果step是'0'它将如何结束? –
如何在'0'和'1'之间有*整数*值? –
你是什么意思step是'[0; 1)'这是否意味着你尝试用step不是一个整数? – game0ver