Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 检查数组是否包含偶数,然后显示最低偶数(如果不存在偶数,则显示奇数)_Swift - Fatal编程技术网

Swift 检查数组是否包含偶数,然后显示最低偶数(如果不存在偶数,则显示奇数)

Swift 检查数组是否包含偶数,然后显示最低偶数(如果不存在偶数,则显示奇数),swift,Swift,在函数中,我想首先检查给定的数组是否包含任何数字 如果数组中有偶数,我想显示最小的数,如果没有偶数,我想至少显示最小的奇数,同时通知用户没有偶数 我遇到的问题是:如果数组中的奇数低于最低偶数,那么它将忽略数组中存在偶数的事实 我解决这个问题的进展是首先能够确定数组中的最小数 func smallestNumberInArray(listOfNumbers numbers: [Int]) -> Int { var smallestNumber = numbers[0] for x i

在函数中,我想首先检查给定的数组是否包含任何数字

如果数组中有偶数,我想显示最小的数,如果没有偶数,我想至少显示最小的奇数,同时通知用户没有偶数

我遇到的问题是:如果数组中的奇数低于最低偶数,那么它将忽略数组中存在偶数的事实

我解决这个问题的进展是首先能够确定数组中的最小数

func smallestNumberInArray(listOfNumbers numbers: [Int]) -> Int {
  var smallestNumber = numbers[0]
  for x in numbers {
    if x < smallestNumber {
      smallestNumber = x
    }
  }
  return smallestNumber
}
打印出200和202

我试着把它合并成一个函数

func checkSmallestEvenNumber(yourNumbers numbers: [Int]) -> String {
  var smallestNumber = numbers[0]
  var returnString = "Placeholder"

  for x in numbers {
    if x % 2 == 0 {
      if x < smallestNumber {
        smallestNumber = x
        returnString = "The smallest even number is: \(smallestNumber)"
      }
    } else {
      if x < smallestNumber && x % 2 != 0 {
        smallestNumber = x
        returnString = "No Evens, but the smallest odd is: \(smallestNumber)"
      }
    }
  }
  return returnString
}
func checkSmallestEvenNumber(您的数字:[Int])->String{
var smallestNumber=数字[0]
var returnString=“占位符”
对于数字中的x{
如果x%2==0{
如果x

因此,我的函数调用
checkSmallestEvenNumber(yourNumbers:[29,33,55,22,130,101,99])
返回
在这种情况下,最小的偶数是:22
,但如果我将55改为5,则返回值是
No Evens,但最小的奇数是:5,当我希望它静止22时。

有很多方法可以修复它。我对你的代码做了一些调整

func checkSmallestEvenNumber(yourNumbers numbers: [Int]) -> String {
    guard !numbers.isEmpty else {
        return "Empty array"
    }
    var smallestNumber = numbers[0]
    var returnString = ""

   for x in numbers {
    if x % 2 == 0,
        (smallestNumber % 2 != 0 || x < smallestNumber) {
             smallestNumber = x
        print(smallestNumber)

             returnString = "The smallest even number is: \(smallestNumber)"
        
     } else if x < smallestNumber,
            smallestNumber % 2 != 0,
            x % 2 != 0 {
         smallestNumber = x

         returnString = "No Evens, but the smallest odd is: \(smallestNumber)"
     }
    }
    if returnString.isEmpty {
        if smallestNumber % 2 == 0 {
            returnString = "The smallest even number is: \(smallestNumber)"
        } else {
            returnString = "No Evens, but the smallest odd is: \(smallestNumber)"
        }
    }
  return returnString
}

checkSmallestEvenNumber(yourNumbers: [0, 2, 23, 55, 130, 101, 55])
func checkSmallestEvenNumber(您的数字:[Int])->String{
守卫!数字。我还缺别的吗{
返回“空数组”
}
var smallestNumber=数字[0]
var returnString=“”
对于数字中的x{
如果x%2==0,
(最小数目%2!=0 | | x<最小数目){
最小数量=x
打印(最小号)
returnString=“最小的偶数是:\(最小的数字)”
}否则,如果x
有很多方法可以修复它。我对你的代码做了一些调整

func checkSmallestEvenNumber(yourNumbers numbers: [Int]) -> String {
    guard !numbers.isEmpty else {
        return "Empty array"
    }
    var smallestNumber = numbers[0]
    var returnString = ""

   for x in numbers {
    if x % 2 == 0,
        (smallestNumber % 2 != 0 || x < smallestNumber) {
             smallestNumber = x
        print(smallestNumber)

             returnString = "The smallest even number is: \(smallestNumber)"
        
     } else if x < smallestNumber,
            smallestNumber % 2 != 0,
            x % 2 != 0 {
         smallestNumber = x

         returnString = "No Evens, but the smallest odd is: \(smallestNumber)"
     }
    }
    if returnString.isEmpty {
        if smallestNumber % 2 == 0 {
            returnString = "The smallest even number is: \(smallestNumber)"
        } else {
            returnString = "No Evens, but the smallest odd is: \(smallestNumber)"
        }
    }
  return returnString
}

checkSmallestEvenNumber(yourNumbers: [0, 2, 23, 55, 130, 101, 55])
func checkSmallestEvenNumber(您的数字:[Int])->String{
守卫!数字。我还缺别的吗{
返回“空数组”
}
var smallestNumber=数字[0]
var returnString=“”
对于数字中的x{
如果x%2==0,
(最小数目%2!=0 | | x<最小数目){
最小数量=x
打印(最小号)
returnString=“最小的偶数是:\(最小的数字)”
}否则,如果x
利用更高级别的函数,如带谓词的
过滤器
是多个(of:2)
min()

结果必须是可选的,以覆盖输入数组可以为空的情况

func smallestNumberInArray(listOfNumbers numbers: [Int]) -> Int? {
    if let smallestEvenNumber = numbers.filter({$0.isMultiple(of: 2)}).min() { return smallestEvenNumber }
    return numbers.min()
}

smallestNumberInArray(listOfNumbers: [29, 33, 5, 22, 130, 101, 99])
或者–可能更有效–首先对数组进行排序,然后返回第一个偶数或第一个必须为奇数的数字,或者–如果数组为空–返回
nil

func smallestNumberInArray(listOfNumbers numbers: [Int]) -> Int? {
    let sortedArray = numbers.sorted()
    return sortedArray.first{$0.isMultiple(of: 2)} ?? sortedArray.first
}
第三种方法是首先以偶数和奇数对数组进行排序,并获得最小的切片数

func smallestNumberInArray(listOfNumbers numbers: [Int]) -> Int? {
    var mutableNumbers = numbers
    let firstOddIndex = mutableNumbers.partition(by: {$0.isMultiple(of: 2)})
    return mutableNumbers[firstOddIndex...].min() ?? mutableNumbers[0..<firstOddIndex].min()
}
func smallestNumberInArray(列表编号:[Int])->Int?{
变量可变数字=数字
设firstOddIndex=mutableNumbers.partition(by:{$0.isMultiple(of:2)})

返回可变数字[firstOddIndex…].min()??可变数字[0..利用更高级别的函数,如带谓词的
isMultiple(of:2)
min()

结果必须是可选的,以覆盖输入数组可以为空的情况

func smallestNumberInArray(listOfNumbers numbers: [Int]) -> Int? {
    if let smallestEvenNumber = numbers.filter({$0.isMultiple(of: 2)}).min() { return smallestEvenNumber }
    return numbers.min()
}

smallestNumberInArray(listOfNumbers: [29, 33, 5, 22, 130, 101, 99])
或者–可能更有效–首先对数组进行排序,然后返回第一个偶数或第一个必须为奇数的数字,或者–如果数组为空–返回
nil

func smallestNumberInArray(listOfNumbers numbers: [Int]) -> Int? {
    let sortedArray = numbers.sorted()
    return sortedArray.first{$0.isMultiple(of: 2)} ?? sortedArray.first
}
第三种方法是首先以偶数和奇数对数组进行排序,并获得最小的切片数

func smallestNumberInArray(listOfNumbers numbers: [Int]) -> Int? {
    var mutableNumbers = numbers
    let firstOddIndex = mutableNumbers.partition(by: {$0.isMultiple(of: 2)})
    return mutableNumbers[firstOddIndex...].min() ?? mutableNumbers[0..<firstOddIndex].min()
}
func smallestNumberInArray(列表编号:[Int])->Int{
变量可变数字=数字
设firstOddIndex=mutableNumbers.partition(by:{$0.isMultiple(of:2)})

返回mutableNumbers[firstOddIndex…].min()??mutableNumbers[0..我已经将@achu的答案标记为正确,但正如我在评论中提到的,我在@achu回答后几分钟就发现了

下面是我不太优雅的解决方案:我将功能分为两个函数,并在主函数中传递一个函数作为参数

func findLowestNumber(passingArray nums: [Int]) -> Int{
  var small = nums[0]
  for x in nums {
    if x < small {
      small = x
    }
  }
 return small
}
我首先做的是检查是否有任何数字是偶数,如果没有,那么我创建了一个这样的字符串,然后将前面的函数作为参数传递,以至少找到最低的奇数

主要的修正是,如果有任何even,我会将它们附加到一个新数组中