为什么在Java中1的平方根等于1会返回false?

时间:2018-10-10 06:28:16

标签: java stream square-root

public static boolean checkSquare(int i){
    return IntStream
            .rangeClosed(1, i/2)
            .anyMatch(x -> Math.sqrt(x) == i);
}

当我输入1作为用户输入时,它返回false。我不明白为什么1的平方根不等于1。有人可以告诉我我的代码正确吗?

1 个答案:

答案 0 :(得分:4)

如果为您的用户输入分配了i变量,则清楚为什么

IntStream.rangeClosed(1, i/2).anyMatch(x -> Math.sqrt(x) == i);

false时返回i==1,因为1/2 == 0,所以IntStream.rangeClosed(1, 0)是空流。

将您的方法更改为:

public static boolean checkSquare(int i){
    return IntStream
            .rangeClosed(1, i)
            .anyMatch(x -> Math.sqrt(x) == i);
}

或者,如果您确实想保持将IntStream的大小减半的优化:

public static boolean checkSquare(int i) {
    return IntStream
            .rangeClosed(1, Math.max(1,i/2))
            .anyMatch(x -> Math.sqrt(x) == i);
}