2016-09-18 22 views
-4

就像標題所說,我是一個Java初學者,我目前正在學校中的一個項目中工作,我在動物園中存儲動物並顯示他們的聲音。 這是我Zoo類:存儲在不同的數組java初學者

public final class Zoo { 

    private Animal[] animals; 
    private int nextIndex; 

    public Zoo() { 
     animals = new Animal[5]; 
     nextIndex = 0; 
    } 

    public void addAnimal(Animal animal) { 

     if (animal instanceof DangerousAnimal) { 
      System.out.println(animal.getAnimalName() + " is dangerous. We don't store dangerous animals in our zoo!"); 
      return; 
     } 

     if (doesAnimalExist(animal)) { 
      System.out.println(animal.getAnimalName() + " already exists in storage. Can't store it twice!"); 
     } else { 

      if (nextIndex >= animals.length) { 
       animals = Arrays.copyOf(animals, animals.length + 5); 
      } 
      animals[nextIndex] = animal; 
      nextIndex++; 

     } 

    } 

    public void hearAnimalSound() { 

     for (Animal aniTemp : animals) { 
      if (aniTemp == null) { 
       break; 
      } 
      System.out.println(aniTemp.getAnimalName() + ": " + aniTemp.sound()); 

     } 
    } 

    public boolean doesAnimalExist(Animal animalAdd) { 

     for (Animal animal : animals) { 
      if (animalAdd.equals(animal)) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

現在我需要存儲我的動物在兩個不同的陣列,家養和野生的,我不知道如何做到這一點。

我想這樣做是這樣的:

public class AnimalStorage { 

    private Animal[] animals; 

    public void addAnimal(Animal animal) { 

    } 
} 

public class Zoo { 

    private AnimalStorage domesticAnimals; 

private AnimalStorage wildAnimals; 



public void addAnimal(Animal animal) { 

    } 

} 

但是,什麼纔是我的addAnimal方法各自的類實現?或者我應該以另一種方式來做? 我有點迷失在這裏。我很感激我能得到的所有幫助。 謝謝! 大衛

@ajb對不起,這裏是我的動物類和子類:

公共抽象類動物{

private final String animalName; 

public Animal(String animalName) { 
    this.animalName = animalName; 
} 

public abstract String sound(); 

public String getAnimalName() { 
    return animalName; 
} 

@Override 
public String toString() { 
    return animalName; 
} 

@Override 
public boolean equals(Object otherAnimal) { 
    if (otherAnimal != null && this.getClass().equals(otherAnimal.getClass())) { 
     Animal animal = (Animal) otherAnimal; 

     return this.animalName.equals(animal.animalName); 
    } 
    return false; 

} 

}

公衆最終熊類動物延伸,實現DangerousAnimal {

public Bear(String animalName) { 
    super(animalName); 
} 

@Override 
public String sound() { 
    return "Wraaaaaar!"; 
} 

@Override 
public String toString() { 
    return super.getAnimalName(); 
} 

}

公共最後一類猴動物擴展{

public Monkey(String animalName) { 
    super(animalName); 
} 

@Override 
public String sound() { 
    return "Ooooh ooh aaah aaah!"; 
} 

@Override 
public String toString() { 
    return getAnimalName(); 
} 

}

動物的其餘部分都是一樣的..

我主要如下所示:

公共類主{public static void main(String [] args){

Zoo zoo = new Zoo(); 

    zoo.addAnimal(new Bear("Baloo the Bear")); 
    zoo.addAnimal(new Lion("Simba the Lion")); 
    zoo.addAnimal(new Snake("Kaa the Snake")); 
    zoo.addAnimal(new Monkey("Abu the Monkey")); 
    zoo.addAnimal(new Bird("Tweety the Bird")); 
    zoo.addAnimal(new Donkey("I-or the Donkey")); 

    zoo.hearAnimalSound(); 

    System.out.println(); 
    zoo.addAnimal(new Donkey("I-or the Donkey")); 
} 

}

+0

沒有看到動物類和子類,或者至少知道它們是什麼以及它們支持什麼方法,我懷疑任何人都可以真正給你提供任何幫助。 – ajb

+0

對不起!我編輯了我的帖子,現在你可以看到我的Animal類,子類和主類。謝謝! – David

回答

0

在動物園類,你可以(我假設你有動物的家養及野生子類):

public void addAnimal(Animal animal) { 
    if(animal instanceof DomesticAnimal) 
    domesticStorage.addAnimal(animal); 
    else 
    wildStorage.addAnimal(animal) 
} 

而且在AnimalStorage剛:

animals[currentIndex++] = animal;

如果你不需要重複你需要的照顧,就像你在Zoo類中做的一樣。此外,我建議使用ArrayList而不是陣列,你是通過複製自己擴展你的陣列,但爲什麼這樣做,如果你只能使用ArrayList?你可能不知道有這樣的事情,所以我現在告訴你。你不喜歡這樣:

List<Animal> list = new ArrayList<Animal>();

而且你可以只動物對象添加到它,只要你想要的,它會擴展其本身,也可以刪除它們,通過索引設置它們,通過指數讓他們等等,請檢查以下內容:ArrayList doc.

+0

嗨,我不使用ArrayList的原因是這是一個學校作業,我們不允許使用它。我編輯了我的帖子,現在你可以看到我的Animal類,子類和主類。謝謝! – David

+0

但是你想存放'家畜'和'野生'動物,你有接口嗎?如果不是那麼你想如何確定動物是家養還是野生? – Shadov