我一直在研究一个问题,我需要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循环是该方法中最重要的部分,但我从未见过以分号结尾的那个,我不知道它是如何工作的。有人可以向我解释一下它在这种方法中的作用是什么?
答案 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);
}