如何确定一个int是完美正方形?

时间:2019-03-19 18:05:38

标签: java lambda java-8 java-stream

我的代码似乎可以通过很多情况,但是我的代码似乎无法通过特定的私人测试用例。谁能帮我吗?

static boolean isSquare(int n) {
    IntStream y=IntStream.range(1, n).map(((int x)->{return x*x;}));
    return y.anyMatch(x->(x==n));
}

2 个答案:

答案 0 :(得分:0)

它失败1,因为1也是一个完美的正方形,并且您当前的代码当前无法处理这种情况。将您的代码更改为:

static boolean isSquare(int n) {
    return IntStream.rangeClosed(0, n).map(x -> x * x).anyMatch(x -> x == n);
}

请注意,我们如何使用rangeClosed而不是同时包含上限和下限的range

答案 1 :(得分:0)

您可以像这样在流水管道中使用peek观察发生的情况:

IntStream y=IntStream.range(1, n).map(((int x)->{return x*x;})).peek( System.out::println);

我认为问题可能在于范围必须为rangeClosed:

 static boolean isSquare(int n) {
    IntStream y=IntStream.rangeClosed(1, n).map(((int x)->{return x*x;})).peek( System.out::println);
    return y.anyMatch(x->(x==n));
}

而且,它不适用于负数。

希望这可以为您提供帮助。