我的逻辑出了什么问题?9这个循环如何作为素数而非素数出现?
这可以按照0,1,2,3,4,5,6,7,8的预期工作,但挂起9 ...
var userInput = 9
if userInput == 0 {
print("0 is not a prime number")
} else if userInput == 1 {
print("1 is not a prime number")
} else if userInput == 2 {
print("2 is a prime number")
} else {
for var i = 2; i < userInput; i = i + 1 {
if userInput % i == 0 {
print("\(userInput) is not a prime number")
break
} else {
print("\(userInput) is a prime number")
break
}
}
}
Run Code Online (Sandbox Code Playgroud)
删除其中一个break陈述.循环需要完全运行,直到找到不是素数的条件.如果没有找到上述条件,则为素数.
var userInput = 9
if userInput == 0 {
print("0 is not a prime number")
} else if userInput == 1 {
print("1 is not a prime number")
} else if userInput == 2 {
print("2 is a prime number")
} else {
for var i = 2; i < userInput; i = i + 1 {
if userInput % i == 0 {
print("\(userInput) is not a prime number")
break
} else {
print("\(userInput) is a prime number")
// no break here
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者更有用:
逻辑嵌入在函数中,因此您可以使用return控制流代替break.因为return true最后你只需要寻找false条件.如果它不是一个素数,你return false用来逃避函数,return true最后将永远不会被调用.
extension Int {
func isPrimeNumber() -> Bool {
switch self {
case 0 : return false
case 1 : return false
default :
for i in 2..<self {
if (self % i) == 0 {
return false
}
}
}
return true
}
}
userInput.isPrimeNumber()
Run Code Online (Sandbox Code Playgroud)
该函数放在扩展名中,Int因此您只需调用该函数即可userInput.
| 归档时间: |
|
| 查看次数: |
865 次 |
| 最近记录: |