2011-06-15 38 views
3

我被困在作業問題......到目前爲止,僅使用數組我遇到了麻煩,通過將它設置爲空對象來刪除數組中的對象。 。我有3種方法,一種方法來添加一個對象,一種方法從數組返回一個特定的對象,一種方法來刪除..到目前爲止,添加和返回對象的方法工作..但不是刪除方法...一些幫助傢伙?需要幫助從普通的對象數組中刪除指定的對象

這是對陣列和方法的類...我測試的方法主要方法

public class Book { 

    public void addContact(Contact[] contactBook) 
    { 
     int slots = 0; 
     for(Contact i : contactBook) 
      if (i == null) 
       slots++; 

     if(slots == 0) 
      System.out.println("Contact book full..can't add anymore!"); 

     else 
     { 
      String name = Keyboard.readString("Enter name: "); 
      int id = Keyboard.readInt("Enter "+name+"'s id: "); 
      String classroom = Keyboard.readString("Enter "+name+"'s class: "); 
      int number = Keyboard.readInt("Enter "+name+"'s mobile: "); 

      for (int i = 0; i < contactBook.length; i++) 
      { 
       if(contactBook[i] == null){ 
        contactBook[i] = new Contact(name,id,number,classroom); 
        break; 
       } 
      } 
     }//end else 

    }//end method 

    public Contact getContact(Contact[] contactList) 
    { 
     Contact contact = null; 
     int id = Keyboard.readInt("Enter student id: "); 

     try 
     { 
      for(Contact i : contactList) 
      { 
       if(i.id == id) 
       { 
        contact =i; 
        break; 
       } 
      } 
     } 
     catch(NullPointerException e) 
     { 
      System.out.println("Student ID:"+id+" does not exist.."); 
     } 

     return contact; 
    }//end getContact 

    public void deleteContact(Contact[] contactList) 
    { 
     Contact delete = getContact(contactList); 

     for(Contact i : contactList) 
     { 
      if(i!=null) 
       if(delete.id == i.id) 
       { 
        i = null; 
        break; 
       } 
     } 
    }//end delete 

    public static void main(String args[]) 
    { 
     Contact[] contacts = new Contact[200]; 
     Book newBook = new Book(); 

     newBook.addContact(contacts); 

     for (Contact i : contacts) 
      if(i != null) 
       System.out.println(i); 

     newBook.deleteContact(contacts); 

     for (Contact i : contacts) 
      if(i != null) 
       System.out.println(i); 
    } 
} 

這是該對象的類別 公共類聯繫{

String name; 
    String classroom; 
    int id; 
    int number; 

    Contact(String name, int id, int number,String classroom) 
    { 
     this.name = name; 
     this.id = id; 
     this.number = number; 
     this.classroom = classroom; 
    } 

    public String toString() 
    { 
     return ""+name+", student id: "+id+" class:"+classroom+" mobile:"+number; 
    } 

} 
+0

使用ArrayList代替。它會給你更多的命令來操縱你的對象數組。您可以輕鬆地從ArrayList中刪除一個對象。 – 2011-06-15 16:48:24

+0

以及我不允許使用ArrayList .. :( – Shizumaru18 2011-06-15 16:48:53

+0

這真的很糟糕。那麼你可以採取從文件中刪除內容的方式。手段,創建另一個大小的數組-1。你想刪除到新陣列的對象 – 2011-06-15 16:57:20

回答

3

迭代器之前 版本兼容並參考複印件退回到聯繫對象,不要使用 它。您將此副本設置爲null,而不是存儲在數組中的對象。

使用這樣的事情:

for(int i=0; i<contactList.size; i++) { 
    if(delete.id == contactList[i].id) { 
     contactList[i] = null; 
     break; 
    } 
} 
2

我不認爲你可以這樣使用增強for循環。你應該使用正常的循環,並做contactList[i] = null其中我是索引。這裏有一些guidelines

凡for-每個都合適 雖然增強for循環可以使代碼更清晰,但它不能用於一些常見的情況。

  • 只能訪問。元素不能爲 ,例如,不要將 增加到集合中的每個元素。
  • 只有單一結構。這不是 可能一次遍歷兩個 結構,例如,比較 兩個陣列。
  • 只有單個元素。單個元素訪問僅適用於 ,例如,不會對 比較連續的元素。
  • 只能轉發。有可能 迭代只能通過單個 步驟轉發。至少Java 5中,如果你需要Java 5的
+0

嗯...好的..謝謝 – Shizumaru18 2011-06-15 16:51:47

+0

所以我只能分配該變量從增強for循環到另一個變量? – Shizumaru18 2011-06-15 16:53:23

+0

@ Shizmumaru18,看到我的編輯,它現在包含一些基本指南 – jhlu87 2011-06-15 16:54:34