我想检查一个数字是否为质数。我编写了以下代码,但没有返回任何值:
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/