我使用列表进行排队练习。
当我使用peek([Int])并删除([Int])
时Xcode显示
致命错误:索引超出范围
我将removeItem = [Int]用于放入已删除的值
当值进入时,会出错。
自从我练习以来,我就知道为什么会这样。
请为我解释一下。
class QueNode
{
var queData : Int?
var link : QueNode?
}
class QueList
{
var front : QueNode?
var rear : QueNode?
func isEmpty() -> Bool
{
return (front == nil)
}
func insert(inputData : Int) {
var newNode = QueNode()
newNode.link = nil
newNode.queData = inputData
if (isEmpty())
{
rear = newNode
front = newNode
}
else
{
rear?.link = newNode
rear = newNode
}
}
func remove(var item : [Int]) -> Bool
{
if isEmpty()
{
print("empty que")
return false
}
else
{
item[0] = front!.queData!
front = front?.link
if front == nil {
rear = nil
}
return true
}
}
func peek( var item : [Int]) -> Bool {
if isEmpty() {
print("empty que")
return false
}else
{
item[0] = (front!.queData)!
return true
}
}
}
var aQueue = QueList()
var insertItem = Int()
for i in 0..<3
{
insertItem = (i + 1) * 10
aQueue.insert(insertItem)
print(insertItem)}
var removeItem = [Int]()
while aQueue.remove(removeItem) /////I have an index error here.
{
print(removeItem[0])
}
答案 0 :(得分:2)
有几个问题。
一个是您不能使用下标将项附加到空数组。
第二个是var
参数只影响方法中的可变性(并且已被弃用)。
要获得我想要的内容,您需要更改方法和通话。
func remove(inout item : [Int]) -> Bool
{
if isEmpty()
{
print("empty que")
return false
}
else
{
item.insert(front!.queData!, atIndex: 0)
front = front?.link
if front == nil {
rear = nil
}
return true
}
}
//...
while aQueue.remove(&removeItem)
{
print(removeItem[0])
}