这个while循环不会让我和for循环一样

时间:2014-04-23 23:22:07

标签: java

有人可以帮助我为什么这个for循环不会像while循环一样做什么?

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World");

        int Bits = 0;
        int dataLength = 8;

        System.out.println(dataLength);

        /*
        for(int i = (int) (Math.pow(2,numCheckBits) -1); i < dataLength + Bits; i++){
            numCheckBits = i;
        }
        */

        while ((Math.pow(2, Bits) - 1) < dataLength + Bits)
            Bits++;

        System.out.println(Bits);
    }
}

2 个答案:

答案 0 :(得分:2)

for循环

的确切翻译
for(int i = (int) (Math.pow(2,numCheckBits) -1); i < dataLength + Bits; i++){
    numCheckBits = i;
}

while循环是:

int i= (int) (Math.pow(2, numCheckBits) -1);
while (i < dataLength + Bits)
{
    numCheckBits = i;
    i++;
}

答案 1 :(得分:1)

for(int i = (int) (Math.pow(2,numCheckBits) -1); i < dataLength + Bits; i++){
    numCheckBits = i;  

当循环开始时,i设置为2 numCheckBits -1。然后,每次循环时,它都会增加1.因此,如果numCheckBits从0开始,i将采用值1,2,3,...,{{1 }}。在循环内重新分配dataLength + Bits - 1对此有影响,因为使用numCheckBits的表达式仅在循环开始时计算。

numCheckBits

在这种情况下,每次都会评估涉及while ((Math.pow(2, Bits) - 1) < dataLength + Bits) Bits++; 的表达式。这意味着Math.pow采用值0,1,... floor(log 2 Bits)或类似的东西。

与您的(dataLength + Bits)循环等效的for循环将while作为第二表达式,因此将针对{测试该值每次{1}}:

Math.pow

[或者你想在循环中做的任何事情 - 你可能不再需要dataLength + Bits]。