EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)。队列

时间:2016-06-16 11:54:12

标签: swift

我使用列表进行排队练习。

当我使用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])
}

1 个答案:

答案 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])
}