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

标签 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。谁能告诉我我的代码是否正确?

最佳答案

如果您的用户输入被分配给您的 i 变量,那么原因就很清楚

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

i==1时返回false,因为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);
}

关于java - 为什么 1 的平方根等于 1 在 java 中返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52733921/

相关文章:

c++ - 取大于 2 的根

python - 试图制作一个简单的质数检查器,不会让我使用平方根。 Python 3.2

java - 创建 jtds 连接时出错

java - 无法在 Java 线程内创建 for 循环 - 为什么?

java - 错误: type mismatch - how to persist with hibernate a bi-directional OneToOne mapping using spring-mvc forms

node.js - 同步流输出

c# - 管理大型 IStream 的正确方法是什么?

node.js - NodeJs 流管道是对称的吗?

java - Android 平方根计算错误

java - UnsatisfiedLinkError -- Play !依赖关系