我正在研究一些HackerRank解决问题的挑战。我现在使用的语言是Swift。目的是计算具有 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($0) {
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)!)
有人可以告诉我该怎么做,我的函数应该返回diagDifference
。我对Swift有点满意,但是代码中仍有一些部分我不太清楚,例如:
fileHandle.write(String(result).data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)
我对此的理解是,代码使用diagonalDifference()
函数的调用来写入文件。但是,当我在Swift文档中进行查询时,发现write()
方法已被弃用。
没有特别考虑这个问题,如果您总体上可以建议对我的代码或逻辑进行任何改进,请这样做。
答案 0 :(得分:1)
此行上有一个数组超出范围错误。考虑一下i
为0
时会发生什么:
secondarySum += arr[i][n - (i - 1)]
将其更改为:
secondarySum += arr[i][n - i - 1]