【问题标题】:How to determine if an int is perfect square?如何确定一个 int 是否是完美的正方形?
【发布时间】:2019-03-19 18:05:37
【问题描述】:

我的代码似乎通过了许多案例,但我的代码似乎未能通过特定的私人测试案例。谁能帮帮我?

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

【问题讨论】:

  • 我相信 0 也符合大多数定义的完美正方形?
  • 你能分享那个测试用例吗?
  • 您好,失败的测试用例没有显示,因为我们需要自己找出错误,而不是参考测试用例。但我看不出我的代码哪里出错了。
  • 是否因超时而失败?

标签: java lambda java-8 java-stream


【解决方案1】:

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

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

请注意我们如何使用rangeClosed 而不是range,后者包括上限和下限。

【讨论】:

  • 是的,我意识到我的错误并没有考虑到 0 也是一个完美数字这一事实。谢谢大家帮助我!
  • @jedrik :有任何答案对您有用吗?如果是,请考虑接受/支持他们。 What should I do when someone answers my question?
【解决方案2】:

您可以像这样在流管道中使用 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));
}

而且,它不适用于负数。

希望对你有帮助。

【讨论】:

  • 负数不能是平方数,所以这无关紧要。
猜你喜欢
  • 1970-01-01
  • 2015-11-06
  • 2015-07-05
  • 2016-07-03
  • 2010-09-25
  • 2016-03-07
  • 2015-08-07
相关资源
最近更新 更多