如何在 swift 中的函数中正确调用另一个函数?
How to properly call another function within a function in swift?
我正在学习 swift 并且我已经编写了两个函数并亲自尝试过它们,它们都运行良好。但是,当我尝试在另一个函数中调用一个函数时,我似乎无法获得所需的输出。
手头的任务是一个函数应该打印素数,而另一个函数是计算并检查数字是否是素数.我应该从 print Prime numbers 函数调用 check if number is prime。
下面是我的代码:
此函数计算X:Int是否为质数。它设置为布尔值,因为我应该在它下面的函数中打印 "true" 或 "false"。
func isPrime(_ x: Int) -> Bool {
if(x%2 == 0 || x%3 == 0){
if(x == 2 || x == 3){
return(true)
}
return(false)
}
else{
//if the number is less than or equal to 1, we'll say it's not prime
if(x <= 1){
return(false)
}
}
return true
}
本篇计算1到n的素数打印
func PrintPrimes(upTo n: Int) {
for x in 1...n {
var count = 0
for num in 1..<x {
isPrime(x)
count += 1
}
if count <= 1 {
print(isPrime(x))
}
}
}
这篇文章只运行了两次,我不确定为什么。我不知道是不是因为我没有正确调用它,或者我必须更改一些计算。
感谢所有帮助
编辑:
这是我决定在函数内调用 isPrime 之前的 original printPrimes()。此函数仅计算质数并将它们打印到 n.
func printPrimes(upTo n: Int) {
for x in 1...n {
var count = 0
for num in 1..<x {
if x % num == 0 {
count += 1
}
}
if count <= 1 {
print(x)
}
}
}
您的第二个例程仅打印两个值,因为它正在调用 isPrime
,但从不根据返回值执行任何操作,而是递增 count
。并且由于仅当 count
为 <= 1
时才打印,因此只会对 n
.
的前两个值发生这种情况
但假设您正在尝试打印不超过某个数字的质数,您可以这样做:
func printPrimes(upTo n: Int) {
for x in 1...n {
if isPrime(x) {
print(x)
}
}
}
(按照惯例,在 Swift 中,当我们说“通过 n
”时,我们会迭代 1...n
,如果有人说“直到 n
”,我们会迭代 1..<n
。但是因为你的原始代码片段使用 upTo
和 1...n
,我会在这里使用它,但请注意这不是与标准 Swift API 模式非常一致。)
不幸的是,isPrime
也不正确。所以你必须先解决这个问题。例如,考虑 25。它不能被 2 或 3 整除,但也不是质数。
如果您查看提供的原始 printPrimes
,它实际上做的是说“有多少整数小于 x
是 x
可整除的......如果只能被另一个数整除(即 1
),那么它就是一个质数。”这种逻辑虽然效率不高,但却是正确的。您应该继续在 isPrime
例程中使用它。但是那个“能被2或3整除”的逻辑是不正确的。
你可以这样做,在你的 printPrimes 中你可以循环到你想要的数字,然后通过调用带有数字的函数来检查数字是否是质数。但是你必须检查你的 isPrime 函数。你的 printPrimes 应该只做它的名字所说的(打印最多 n 的素数)并且检查数字是否为素数的所有逻辑应该在你的 isPrime 函数中。
在函数上使用 camelCase 也是一个好习惯,您应该将函数重命名为 printPrimes 而不是 PrintPrimes。
func printPrimes(upTo n: Int) {
for x in 1...n {
if isPrime(x) {
print(x)
}
}
}
我正在学习 swift 并且我已经编写了两个函数并亲自尝试过它们,它们都运行良好。但是,当我尝试在另一个函数中调用一个函数时,我似乎无法获得所需的输出。
手头的任务是一个函数应该打印素数,而另一个函数是计算并检查数字是否是素数.我应该从 print Prime numbers 函数调用 check if number is prime。
下面是我的代码:
此函数计算X:Int是否为质数。它设置为布尔值,因为我应该在它下面的函数中打印 "true" 或 "false"。
func isPrime(_ x: Int) -> Bool {
if(x%2 == 0 || x%3 == 0){
if(x == 2 || x == 3){
return(true)
}
return(false)
}
else{
//if the number is less than or equal to 1, we'll say it's not prime
if(x <= 1){
return(false)
}
}
return true
}
本篇计算1到n的素数打印
func PrintPrimes(upTo n: Int) {
for x in 1...n {
var count = 0
for num in 1..<x {
isPrime(x)
count += 1
}
if count <= 1 {
print(isPrime(x))
}
}
}
这篇文章只运行了两次,我不确定为什么。我不知道是不是因为我没有正确调用它,或者我必须更改一些计算。
感谢所有帮助
编辑:
这是我决定在函数内调用 isPrime 之前的 original printPrimes()。此函数仅计算质数并将它们打印到 n.
func printPrimes(upTo n: Int) {
for x in 1...n {
var count = 0
for num in 1..<x {
if x % num == 0 {
count += 1
}
}
if count <= 1 {
print(x)
}
}
}
您的第二个例程仅打印两个值,因为它正在调用 isPrime
,但从不根据返回值执行任何操作,而是递增 count
。并且由于仅当 count
为 <= 1
时才打印,因此只会对 n
.
但假设您正在尝试打印不超过某个数字的质数,您可以这样做:
func printPrimes(upTo n: Int) {
for x in 1...n {
if isPrime(x) {
print(x)
}
}
}
(按照惯例,在 Swift 中,当我们说“通过 n
”时,我们会迭代 1...n
,如果有人说“直到 n
”,我们会迭代 1..<n
。但是因为你的原始代码片段使用 upTo
和 1...n
,我会在这里使用它,但请注意这不是与标准 Swift API 模式非常一致。)
不幸的是,isPrime
也不正确。所以你必须先解决这个问题。例如,考虑 25。它不能被 2 或 3 整除,但也不是质数。
如果您查看提供的原始 printPrimes
,它实际上做的是说“有多少整数小于 x
是 x
可整除的......如果只能被另一个数整除(即 1
),那么它就是一个质数。”这种逻辑虽然效率不高,但却是正确的。您应该继续在 isPrime
例程中使用它。但是那个“能被2或3整除”的逻辑是不正确的。
你可以这样做,在你的 printPrimes 中你可以循环到你想要的数字,然后通过调用带有数字的函数来检查数字是否是质数。但是你必须检查你的 isPrime 函数。你的 printPrimes 应该只做它的名字所说的(打印最多 n 的素数)并且检查数字是否为素数的所有逻辑应该在你的 isPrime 函数中。 在函数上使用 camelCase 也是一个好习惯,您应该将函数重命名为 printPrimes 而不是 PrintPrimes。
func printPrimes(upTo n: Int) {
for x in 1...n {
if isPrime(x) {
print(x)
}
}
}