for-loop在这个平方根方法中的作用是什么?

时间:2016-09-14 08:45:48

标签: java for-loop

我一直在研究一个问题,我需要BigInteger的平方根,所以复制别人的方法,因为Java没有内置的方法(不是我所知道的)并且它有效。

以下是方法:

public static BigInteger bigIntSqRootFloor(BigInteger x)
    throws IllegalArgumentException {        
    if (x.compareTo(BigInteger.ZERO) < 0) {
        throw new IllegalArgumentException("Negative argument.");
    }

    if (x .equals(BigInteger.ZERO) || x.equals(BigInteger.ONE)) {
        return x;
    }

    BigInteger two = BigInteger.valueOf(2L);
    BigInteger y;

    for(y = x.divide(two); y.compareTo(x.divide(y)) > 0; y = ((x.divide(y)).add(y)).divide(two));
    return y;
}

然而,我认为for循环是该方法中最重要的部分,但我从未见过以分号结尾的那个,我不知道它是如何工作的。有人可以向我解释一下它在这种方法中的作用是什么?

1 个答案:

答案 0 :(得分:3)

它是一个空的for循环 - 即所有逻辑都在for语句中执行,并且没有正文。

for(y = x.divide(two); y.compareTo(x.divide(y)) > 0; y = ((x.divide(y)).add(y)).divide(two));

相当于:

for(y = x.divide(two); y.compareTo(x.divide(y)) > 0; ) {
    y = ((x.divide(y)).add(y)).divide(two);
}

或者:

y = x.divide(two);
while (y.compareTo(x.divide(y)) > 0) {
    y = ((x.divide(y)).add(y)).divide(two);
}