这个 Swift 求方阵对角差的代码有什么问题?

What is the problem with this Swift Code for finding the Diagonal Difference of a square array?

我正在处理一些 HackerRank 问题解决挑战。我现在使用的语言是Swift。 objective 是计算 方阵 n 列和行的对角差。练习的逻辑非常简单,我已经顺利完成了,但是,问题是运行时错误,它发生在 运行 程序 ~ no response on stdout 上。这是错误的屏幕截图:

这是我的代码(diagonalDifference() 函数):

    func diagonalDifference(arr: [[Int]], n: Int) -> Int {
    // Write your code here
    var primarySum = 0
    var secondarySum = 0

    for i in 0..<n {
        primarySum += arr[i][i]
        secondarySum += arr[i][n - (i - 1)]
    }

    var diagDifference = abs(primarySum - secondarySum)

    return diagDifference
}

我在做这些挑战时注意到的另一件事是,当我在讨论选项卡的 Swift 中查找解决方案时,大多数人不包括 n 作为参数在函数中。但是,当我不包含 n 作为参数时,会出现运行时错误。

下面是剩余的代码供参考:

import Foundation

/*
 * Complete the 'diagonalDifference' function below.
 *
 * The function is expected to return an INTEGER.
 * The function accepts 2D_INTEGER_ARRAY arr as parameter.
 */

func diagonalDifference(arr: [[Int]], n: Int) -> Int {
    // Write your code here
    var primarySum = 0
    var secondarySum = 0

    for i in 0..<n {
        primarySum += arr[i][i]
        secondarySum += arr[i][n - (i - 1)]
    }

    var diagDifference = abs(primarySum - secondarySum)

    return diagDifference
}

let stdout = ProcessInfo.processInfo.environment["OUTPUT_PATH"]!
FileManager.default.createFile(atPath: stdout, contents: nil, attributes: nil)
let fileHandle = FileHandle(forWritingAtPath: stdout)!

guard let n = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!)
else { fatalError("Bad input") }

var arr = [[Int]]()

for _ in 1...n {
    guard let arrRowTemp = readLine()?.replacingOccurrences(of: "\s+$", with: "", options: .regularExpression) else { fatalError("Bad input") }

    let arrRow: [Int] = arrRowTemp.split(separator: " ").map {
        if let arrItem = Int([=12=]) {
            return arrItem
        } else { fatalError("Bad input") }
    }

    guard arrRow.count == n else { fatalError("Bad input") }

    arr.append(arrRow)
}

guard arr.count == n else { fatalError("Bad input") }

let result = diagonalDifference(arr: arr, n: n)

fileHandle.write(String(result).data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)

有人能告诉我我应该怎么做吗,我的函数应该 return diagDifference。我对 Swift 比较满意,但仍有部分代码我不是很清楚,例如:

fileHandle.write(String(result).data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)

我对此的理解是,代码使用 diagonalDifference() 函数的调用写入文件。但是,当我在 Swift 文档中查找时,我发现 write() 方法已被弃用。

没有具体考虑这个问题,如果您可以对我的代码或逻辑提出任何改进建议,请提出。

您在此行出现数组越界错误。想想当 i0:

时会发生什么
secondarySum += arr[i][n - (i - 1)]

改为:

secondarySum += arr[i][n - i - 1]