2014-03-24 184 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对象)。