我正在尝试编写一个返回第 n 个素数的 Swift 3.0 方法。存在 other sources for this problem但这些都是在 Swift 3.0 发布之前编写的,因此代码没有跟进。在我的返回语句中 return prime
我收到一条错误消息
Variable 'prime' used before being initialized
这是我的源代码:
func nthPrimeNumber(_ n: Int) -> Int {
var prime: Int
var modulo: Int
var checkPrime: Bool
var count = 0
for prime in stride(from: 2, to: 50, by: 1)
{
if (count < n){
checkPrime = true;
for modulo in stride(from: 2, to: prime, by: 1)
{
if ((prime % modulo) == 0 )
{
checkPrime = false
}
}
if (checkPrime)
{
count += 1
}
}
}
return prime
}
最佳答案
@BenjaminLowry 的更改将修复编译器警告,但算法仍然会出错。这里的问题是第一个用于函数的prime
和for循环中使用的第二个prime
是自变量,所以for循环中使用的值不会影响你的结果,因此你的函数将始终返回 0。相反,你需要做这样的事情:
func nthPrimeNumber(_ n: Int) -> Int {
var result: Int = 0
var checkPrime: Bool
var count = 0
for prime in stride(from: 2, to: 50, by: 1)
{
if (count < n){
checkPrime = true;
for modulo in stride(from: 2, to: prime, by: 1)
{
if ((prime % modulo) == 0 )
{
checkPrime = false
}
}
if (checkPrime)
{
count += 1
result = prime
}
}
}
return result
}
modulo
的两次使用也是如此。外部 modulo
未使用,可以删除。
关于swift - 寻找第 n 个质数 |初始化前使用的变量 'prime',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41709734/