我想检查一个数字是否为素数.我编写了以下代码,但它没有返回任何值:
def isprime(x:Int) = {
| if (x==1) false
| else {
| for (i <- 2 to x-1) {
| if (x % i == 0) false
| else true
| }
| }
| }
Run Code Online (Sandbox Code Playgroud)
你所做的是一个叫做定义一个函数,所以很明显它不会返回任何东西,事实上,这个函数返回AnyVal,这显然对你没什么帮助.我怀疑你确实需要返回一个布尔类型.
由于您正在使用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.
Run Code Online (Sandbox Code Playgroud)
如果您不关心if else条件,我甚至会建议一个更简单的版本:
def isPrime1(n: Int): Boolean = ! ((2 until n-1) exists (n % _ == 0))
Run Code Online (Sandbox Code Playgroud)
这也返回一个布尔值.
编辑:
正如@TheArchetypalPaul所述,这也暗示了,问题是你的for循环没有产生任何值 - 你计算一个真/假值,但后来不做任何事情.所以你的else子句不会产生任何值(事实上,它产生Unit).一旦找到除数,就需要返回false - 并且可能存在这样做的方式isPrime1.
一个班轮解决方案
def isPrime(num:Int):Boolean =
(num > 1) && !(2 to scala.math.sqrt(num).toInt).exists(x =>num % x == 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10466 次 |
| 最近记录: |