Janghyup Lee
Janghyup Lee

Reputation: 167

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, sub code=0x0). error while making data structure

I am practicing my array form of data structure with swift.

I made a class "student"

and there are functions like display() and delete()

However, the application is not working.

There is an error message that

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, sub code=0x0).

I think this error is about "optional" problem.

Here is my code.

class student
{


var studentArray = [[String]?]()
var numberOfStudents : Int =  10;




func display()

{

    for (var i = 0; i < numberOfStudents   ; i++)

    {

        print("{");

        for (var j = 0; j < 2; j++)

        {

            print(studentArray[i]![j] + " ");

        }

        print("}");


    }

}


func  delete( value : String)

{

    var i = 0

    for ( i = 0; i < numberOfStudents   ; i++)


    {



        if (value == studentArray[i]![1])

        {

            break;

        }


    }


    if (i == numberOfStudents - 1 )

    {

        print("not found");


    }

    else

    {

        for (var k = i; k < numberOfStudents - 1  ; k++)

        {


            studentArray[k]![1] = studentArray[k+1]![1];
            studentArray[k]![0] = studentArray[k+1]![0];

}


        numberOfStudents--;

    }


}

}



var hello = student()


hello.studentArray = [["0","0ee"],["9","9ee", ]]
hello.display() // I have a error at this point

hello.studentArray

Could anyone explain what is about it for me?

Upvotes: 0

Views: 86

Answers (1)

Grimxn
Grimxn

Reputation: 22497

There are several mistakes in your code. The actual error is caused by your numberOfStudents variable, which is hard coded to 10, even though the array only contains 2 elements. Use studentArray.count in your for loop, not 10. Then read the Swift manual. You should not be using optionals nor C-style for loops in this example.

Here's how I would do it...

class Student {                         // Capitalise your classes
                                        // Unnecessary whitespace removed
    var studentArray: [[String]] = []   // No need for optionals here
    /*              
    var numberOfStudents : Int =  10;   // var is useless & wrong, also no need for semi-colon  
    */        
    func display() {
        /* A Swift-ier way to do this is
         for student in studentArray {
             print("{")
             for field in student {
                 print(field + " ")
             }
             print("}")
         }
         However, using indexing:
         */
        for i in 0 ..< studentArray.count {
            print("{")
            for j in 0 ..< studentArray[i].count { // Don't *know* this will be 2
                print(studentArray[i][j] + " ")    // Don't need semi-colons unless you want to put multiple statements on the same line
            }
            print("}")
        }
    }
    /* func delete() not used in question, so removed from answer */
}

var hello = Student()

hello.studentArray = [["0","0ee"], ["9","9ee", ]] // Note spurious (but not wrong) comma
hello.display()

hello.studentArray

Upvotes: 1

Related Questions