我想检查一个数字是否为质数。我编写了以下代码,但没有返回任何值:

 def isprime(x:Int) = {
     | if (x==1) false
     | else {
     | for (i <- 2 to x-1) {
     | if (x % i == 0) false
     | else true
     | }
     | }
     | }

最佳答案

您所做的是一个称为定义函数的调用,因此显然它不会返回任何内容,事实上,此函数返回AnyVal,这显然对您没有多大帮助。我怀疑您实际上需要返回一个 bool 类型。

由于您正在使用REPL,因此需要定义函数以检查数字是否为质数。我将其称为isPrime2,然后对其进行测试。

def isPrime2(i :Int) : Boolean = {
|     if (i <= 1)
|       false
|     else if (i == 2)
|       true
|     else
|       !(2 to (i-1)).exists(x => i % x == 0)
|   }
// isPrime2: (i: Int)Boolean

(1 to 10).foreach(i => if (isPrime2(i)) println("%d is prime.".format(i)))
// 2 is prime.
// 3 is prime.
// 5 is prime.
// 7 is prime.

如果您不愿意使用其他条件,我什至会建议一个更简单的版本:
def isPrime1(n: Int): Boolean = ! ((2 until n-1) exists (n % _ == 0))

这也返回一个 bool 值。

编辑:

正如@TheArchetypalPaul所说(这也暗示),问题是您的for循环不会产生任何值-您计算的是true/false值,但是对此不执行任何操作。因此,else子句不会产生任何值(实际上,它会产生Unit)。找到除数后,您需要立即返回false-这样做的方法可能存在于isPrime1中。

关于scala - 检查数字是否在Scala中为质数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36882103/

10-11 08:50