2016-06-11 64 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 
相關問題