有人可以帮助我为什么这个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);
}
}
答案 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
]。