public static boolean checkSquare(int i){
return IntStream
.rangeClosed(1, i/2)
.anyMatch(x -> Math.sqrt(x) == i);
}
当我输入1作为用户输入时,它返回false。我不明白为什么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);
}