2014-03-24 253 views
0

如果您有一個數組(不能是ArrayList),將用於存儲「狗的類型」,「狗的名稱」和「狗的年齡」等特定的事物。然後你創建一個顯然會輸入這些元素的對象。但是,如果用戶想要刪除整個對象(所有輸入名稱,年齡和年齡),那麼他們可以通過刪除狗的年齡來完成此操作,然後全部將被刪除。這可能不使用ArrayList?使用對象從數組中刪除

+1

可以更改數組元素以使其具有null值,但創建後無法更改數組的長度*。 –

+0

我在說假設@KamleshArya,因爲這是我想要在我的新學習曲線項目中實現的=)只是對是否可以使用 – user3443834

+0

感興趣。數組包含「Dog」對象是否正確?因爲你的這個陳述*如果你有一個數組(不能是ArrayList),它將被用來存儲諸如「狗的類型」,「狗的名字」和「狗的年齡」等具體的東西。*是相當混亂的。 – SudoRahul

回答

0

你可以這樣做。它並不是很好的Java方法,但它可以工作,並且可以輕鬆地重構它。

在這裏你有狗類:

public class Dog { 

    private String name; 
    private int age; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public static Dog[] removeByName(Dog[] list, String name) { 
     int counter = 0; 
     Dog[] result = new Dog[3]; 
     for (int i = 0; i < list.length; i++) { 
      if (!list[i].getName().equals(name)) { 
       result[counter] = list[i]; 
       counter++; 
      } 
     } 
     return result; 
    } 

} 

在這裏你可以看到如何使用它:

public class NotArrayList { 

    public static void main(String[] args) { 
     Dog[] dogs = new Dog[3]; 

     Dog d1 = new Dog(); 
     d1.setName("aaa"); 
     d1.setAge(1); 

     Dog d2 = new Dog(); 
     d2.setName("bbb"); 
     d2.setAge(1); 

     Dog d3 = new Dog(); 
     d3.setName("ccc"); 
     d3.setAge(1); 

     dogs[0] = d1; 
     dogs[1] = d2; 
     dogs[2] = d3; 

     Dog[] res = Dog.removeByName(dogs, "aaa"); 
     for (Dog d : res) { 
      if (d != null) 
       System.out.println(d.getName()); 
     } 
    } 
} 
0

如果我正確理解你的問題,那麼我想你可以有一個刪除方法通過將該特定索引設置爲null,從數組中刪除Dog對象引用。

public void removeDog(Dog[] dogArray, int age) { 
    for(int i = 0; i < dogArray.length; i++) { 
     if(dogArray[i].getAge() == age){ 
      dogArray[i] = null; // removing the dog object by making it null 
      break; 
     } 
    } 
} 

您需要注意的是,以下是對上述方法所做的假設。

  • 數組大小不變。只是引用了現在刪除的Dog對象的索引現在是null
  • 如果存在多個年齡相同的Dog對象,則會先刪除數組中存在的Dog對象(按索引)。
  • dogArray參數在不是實例變量的情況下傳遞,否則可以避免。
  • 年齡是int類型,並且Dog類擁有公共吸氣劑,getAge()
  • 此方法不會返回任何內容,但可以根據您的需要返回boolean(刪除狀態)或Dog(刪除的Dog對象)。