2012-09-19 27 views
0

實現Zoo類(使用它的測試類)。動物園的名稱和麪積以米爲單位。動物園可以有一個或多個動物。動物有身份證,姓名,類型,年齡,性別。我們應該能夠給動物園添加新的動物,移除動物並確定目前在動物園中有多少動物。如何使用數組列表? [Oop]

這是動物園類:

import java.util.ArrayList; 

public class Zoo { 
    String name; 
    String area; 
    ArrayList<Animal> animals; 
    static int id; 

    public Zoo(String name, String area) { 
     this.name = name; 
     this.area = area; 
    } 

    public void addanimal(animal ann) { 
     animals.add(id, ann); 
     id++; 
    } 
} 

public class Animal { 
    String name; 
    String type; 
    String age; 
    String gender; 

    public Animal(String name, String type, String age, String gender) { 
     this.name = name; 
     this.type = type; 
     this.age = age; 
     this.gender = gender; 
    } 
} 
public class Test { 

    public static void main(String[] args) { 
     Zoo nozha = new Zoo("nozha", "100"); 
     Animal lion = new Animal("lion", "male", "20", "fine"); 
     nozha.addanimal(lion); 
     Znimal tiger = new Animal("tiger", "male", "30", "ssc"); 
     nozha.addanimal(tiger); 
     System.out.print(Zoo.id); 
    } 
} 

首先,我需要的功能(addanimal)幫助,因爲當我打印(zoo.id)它不工作,我不知道如何刪除動物,請幫助我,我在編程初學者,這是我第一次使用ArrayList和我從來沒有問過

+7

它會幫助你(及其他),如果你使用Java命名約定遵守,特別是:類名用大帽('Zoo','Animal')開始,方法名使用駱駝情況下('addAnimal')。 – assylias

+1

什麼不起作用?你期望得到什麼,你得到了什麼。我希望它可以打印'2'假設你改變'名單動物=新的ArrayList ();' –

+0

我會做所有的字段'final'在可能的情況。 ;) –

回答

8

您需要的animals變量初始化爲比其默認值,這是null其他的東西:

private List<Animal> animals = new ArrayList<Animal>(); 

然後查看java.util.Listjavadoc,您會看到它包含用於添加和移除元素的方法以及返回其大小的方法,從而使id變量完全不必要。

而且,在javadoc中的所有類是如何啓動以大寫字母另行通知,並且所有的方法都是在駝峯拼寫(如addAnimal(),而不是像addanimal())。尊重這些慣例:它們是代碼可讀性的一個非常重要的因素。

另外,爲變量選擇適當的類型。以米爲單位的區域應該是int或float或double,但不是String。

+0

我還補充說,最好將id初始化爲0,這很可能,因爲它是靜態的,並且如果類永遠要被擴展/繼承,最好避免可能的頭痛。 – 2012-09-19 11:19:55

+1

正如我在回答中所說的,這個ID變量是完全不必要的,甚至不應該在那裏。 –

+0

這是真的,但我想這是存在的原因。如果沒有,那麼你的答案是完全正確的。 – 2012-09-19 11:23:10

0

首先我需要的功能(addanimal)提供幫助,因爲當我打印(zoo.id)

從您的代碼此基礎似乎zoo.id將返回ArrayList<animals>大小爲什麼要使用的大小所述列表代替animals.size()或由規則封裝,getAnimals().size()這可能arraylist`

返回一個NullPointerException異常,所以intialize ArrayList<animals> with a empty在列表中移除該動物,你最好去animals.remove(Animal ann)

在更新,檢查是否animals.contains(Animal ann)是真實的,通過ID或的hashCode然後檢查什麼指數在列表ann然後通過animals.set(<index>, ann)

0

Zoo.java更新ann

import java.util.ArrayList; 
    public class Zoo { 

    String name; 
    double area; 
    int sizeOfZoo = 0; 
    ArrayList<Animal> animals = new ArrayList<Animal>(); 


    public Zoo(String name, double area) { 
     this.name = name; 
     this.area = area; 

    } 

     public void addAnimal(Animal ann) { 
     animals.add(ann); 
    } 

     public int getSizeOfZoo() { 
       return animals.size(); 
     } 
    } 

動物.java

public class Animal { 
    String name; 
    String type; 
    String age; 
    String gender; 

    public Animal(String name, String type, String age, String gender) { 

      this.name = name; 
      this.type = type; 
      this.age = age; 
      this.gender = gender; 
     }  
    } 

Test.java

public class Test { 

     public static void main(String[] args) { 

      Zoo nozha = new Zoo("nozha", 100); 
      Animal lion = new Animal("lion","fine","20","male"); 
      nozha.addAnimal(lion); 

      Animal tiger = new Animal("tiger","ssc","30","female"); 
      nozha.addAnimal(tiger); 

      System.out.println("Number of animals in zoo: " + nozha.getSizeOfZoo()); 
     } 
} 

我爲您扔了一個getSizeOfZoo()方法,以擺脫Id變量。將區域的字符串更改爲Double。保持你的類獨立,保持命名約定類,變量,methodName()等。它使它更容易閱讀。創建獅子和老虎時的參數稍微偏離了一點,我現在把它作爲名稱,類型,年齡,性別。

檢查出ArrayList和javadoc的,你可以弄清楚如何「刪除」從您的ArrayList中的元素(我不願意做你的項目給你)。你遇到的問題更多的是編碼基礎知識,而不是任何Java特定的,或者特定於OOP的。有一個閱讀,嘗試方法removeAnimal(動物),看看你如何繼續。如果有任何問題,我們可以提供幫助,但請查看getSizeOfZoo()和addAnimal()以及文檔,並且您應該放飛!

希望有所幫助。

+0

也許會將getSizeOfZoo()重命名爲諸如zooPopulation()或numberOfAnimals()之類的更好名稱,或者爲了您自己的原因和清晰度而重新命名。 – RossC