2016-06-11 156 views
0

我正在用swift练习我的数组结构。EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,sub code = 0x0)。在制作数据结构时出错

我做了一个类 “学生”

,并有像显示功能()和delete()

但是,应用程序无法正常工作。

有一个错误消息

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

我认为这个错误是关于 “可选” 的问题。

这是我的代码。

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 

任何人都可以解释什么是对我来说?

+3

有在你的代码的几个误区。实际的错误是由你的'numberOfStudents'变量引起的,该变量被硬编码为10,即使该数组只包含2个元素。在'for'循环中使用'studentArray.count',而不是10.然后阅读Swift手册。在本例中,您不应该使用可选项或C样式循环。 – Grimxn

回答

1

您的代码有几处错误。实际的错误是由您的变量引起的,该变量硬编码为10,即使该数组只包含2个元素。在for循环中使用studentArray.count,而不是10.然后阅读Swift手册。在这个例子中,你不应该使用可选项或C型for循环。

这是我会怎么做呢?

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 
相关问题