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/