我有这样的for循环,当step是(0; 1)时它变得无限。如果步骤为[1; ..)则效果很好。
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 :(得分:6)
如果您尝试使用(0,1)
之间的步骤,则会在添加到i
时将其转换为int,因此您会在每次迭代中将0
添加到i
会导致无限循环!
答案 1 :(得分:2)
它将是无限的,因为如果step
0 ,则向 i 添加零将不会执行任何操作。没有增量意味着无限循环。
答案 2 :(得分:2)
如果步骤为0,则您向i
添加0意味着没有任何内容添加到该值,并且它会被卡住为无限。
由于您将步骤作为double提供,因此可以使用0.0001之类的值。但是,由于i
是一个整数,转换是从double到int,并且0.0001 - &gt; 0.当您将小于1且大于0的值转换为整数时,它将变为0.
将i
更改为double
,您可以使用小数值来增加。
或者,您可以将step
更改为int
,但在这种情况下您将无法使用小数步骤
可以通过除法或乘法找到类似的情况来演示双重例子:
(int) (500 * 0.0001) -> 0.05 as an integer = 0
因此,当您向整数添加一个带小数值(仅为十进制值)的双步时,步骤变为0
,0
被添加到i
并且变为无限。
答案 3 :(得分:0)
当它始终是(0,1)时,循环永远不会结束。
答案 4 :(得分:0)
当它是(0,1)时,在for循环中,您正在验证i <=结束,这是所有时间过去的条件。因此,您的循环不会中断。