Swift:由信号 4 终止
Swift: Terminated by Signal 4
我正在尝试编写一个将 arrayOne、arrayTwo 和 arrayThree 作为输入的函数。如果 arrayTwo 有任何 0 作为它的最后一个元素,该函数应该从数组中删除这些元素,以及从 arrayOne 中删除相同的元素。当我 运行 代码并尝试对其进行测试时,出现错误:"Terminated by signal 4"。
可能是什么问题?
var arrayOneNew = arrayOne
var arrayTwoNew = arrayTwo
var arrayThreeNew = arrayThree
var endElement = arrayTwoNew.last
if endElement == 0 {
var counter = arrayTwoNew.count
while arrayTwoNew[counter] == 0 {
var elementToBeRemoved = arrayTwoNew.remove(at: counter - 1)
var 2ndElementToBeRemoved = arrayOneNew.remove(at: counter - 1)
}
}
您正在创建一个新数组 "arrayTwoNew",它与位于
的原始数组混合在一起
var arrayTwoNew = arrayTwoNew.remove(at: counter - 1)
现在我也在为你的 .remove 苦苦挣扎 - 这个 returns 元素将无法工作。我通常会在这里使用过滤器,但我不确定你在做什么!
//删除删除的代码(用过滤器替换?)让你开始:
let arrayOne = [1,2,3]
let arrayTwo = [2,3,4]
let arrayThree = [5,6,7]
var arrayOneNew = arrayOne
var arrayTwoNew = arrayTwo
var arrayThreeNew = arrayThree
var endIndex = arrayTwoNew.last
if endIndex == 0 {
let counter = arrayTwoNew.count
// arrayTwoNew = arrayTwoNew.remove(at: counter - 1)
while arrayTwoNew[counter] == 0 {
// arrayOneNew = arrayOneNew.remove(at: counter - 1)
}
}
您的主要问题是您将 counter
设置为 arrayTwoNew.count
,它比 arrayTwoNew
中的最后一个有效索引大 1
,因此 while arrayTwoNew[counter] == 0
索引超出范围时崩溃。
还有:
var elementToBeRemoved = arrayTwoNew.remove(at: counter - 1)
可能是为了从 arrayTwoNew
中删除最后一项,但这更容易完成:
arrayTwoNew.removeLast()
特别是因为您没有使用 elementToBeRemoved
。
我认为你正在尝试这样做:
while arrayTwoNew.last == 0 {
arrayTwoNew.removeLast()
arrayOneNew.removeLast()
arrayThreeNew.removeLast()
}
我正在尝试编写一个将 arrayOne、arrayTwo 和 arrayThree 作为输入的函数。如果 arrayTwo 有任何 0 作为它的最后一个元素,该函数应该从数组中删除这些元素,以及从 arrayOne 中删除相同的元素。当我 运行 代码并尝试对其进行测试时,出现错误:"Terminated by signal 4"。
可能是什么问题?
var arrayOneNew = arrayOne
var arrayTwoNew = arrayTwo
var arrayThreeNew = arrayThree
var endElement = arrayTwoNew.last
if endElement == 0 {
var counter = arrayTwoNew.count
while arrayTwoNew[counter] == 0 {
var elementToBeRemoved = arrayTwoNew.remove(at: counter - 1)
var 2ndElementToBeRemoved = arrayOneNew.remove(at: counter - 1)
}
}
您正在创建一个新数组 "arrayTwoNew",它与位于
的原始数组混合在一起var arrayTwoNew = arrayTwoNew.remove(at: counter - 1)
现在我也在为你的 .remove 苦苦挣扎 - 这个 returns 元素将无法工作。我通常会在这里使用过滤器,但我不确定你在做什么!
//删除删除的代码(用过滤器替换?)让你开始:
let arrayOne = [1,2,3]
let arrayTwo = [2,3,4]
let arrayThree = [5,6,7]
var arrayOneNew = arrayOne
var arrayTwoNew = arrayTwo
var arrayThreeNew = arrayThree
var endIndex = arrayTwoNew.last
if endIndex == 0 {
let counter = arrayTwoNew.count
// arrayTwoNew = arrayTwoNew.remove(at: counter - 1)
while arrayTwoNew[counter] == 0 {
// arrayOneNew = arrayOneNew.remove(at: counter - 1)
}
}
您的主要问题是您将 counter
设置为 arrayTwoNew.count
,它比 arrayTwoNew
中的最后一个有效索引大 1
,因此 while arrayTwoNew[counter] == 0
索引超出范围时崩溃。
还有:
var elementToBeRemoved = arrayTwoNew.remove(at: counter - 1)
可能是为了从 arrayTwoNew
中删除最后一项,但这更容易完成:
arrayTwoNew.removeLast()
特别是因为您没有使用 elementToBeRemoved
。
我认为你正在尝试这样做:
while arrayTwoNew.last == 0 {
arrayTwoNew.removeLast()
arrayOneNew.removeLast()
arrayThreeNew.removeLast()
}