为什么这个for循环是无限的?

时间:2017-11-11 17:11:48

标签: java loops for-loop

我有这样的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;
    }
 }

5 个答案:

答案 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

因此,当您向整数添加一个带小数值(仅为十进制值)的双步时,步骤变为00被添加到i并且变为无限。

答案 3 :(得分:0)

当它始终是(0,1)时,循环永远不会结束。

答案 4 :(得分:0)

当它是(0,1)时,在for循环中,您正在验证i <=结束,这是所有时间过去的条件。因此,您的循环不会中断。