From a9868199603456eb741b7ce8712a2991284f368f Mon Sep 17 00:00:00 2001 From: valerpan Date: Fri, 24 Jul 2026 00:22:51 +0300 Subject: [PATCH] Commit hw3 --- src/main/java/Zoo.java | 61 +++++++++++++++------ src/main/java/animals/Animal.java | 6 +- src/main/java/animals/Bear.java | 7 +++ src/main/java/animals/Carnivorous.java | 5 +- src/main/java/animals/Deer.java | 7 +++ src/main/java/animals/Duck.java | 7 +++ src/main/java/animals/Fish.java | 7 +++ src/main/java/animals/Herbivore.java | 5 +- src/main/java/animals/Kotik.java | 7 +++ src/main/java/animals/Sheep.java | 7 +++ src/main/java/employee/Worker.java | 16 ++++-- src/main/java/food/WrongFoodException.java | 7 +++ src/main/java/model/Aviary.java | 48 ++++++++++++++++ src/main/java/model/Size.java | 5 ++ src/main/java/model/WrongSizeException.java | 7 +++ 15 files changed, 175 insertions(+), 27 deletions(-) create mode 100644 src/main/java/food/WrongFoodException.java create mode 100644 src/main/java/model/Aviary.java create mode 100644 src/main/java/model/Size.java create mode 100644 src/main/java/model/WrongSizeException.java diff --git a/src/main/java/Zoo.java b/src/main/java/Zoo.java index 1cf5764..50973bb 100644 --- a/src/main/java/Zoo.java +++ b/src/main/java/Zoo.java @@ -1,14 +1,9 @@ -import animals.Animal; -import animals.Swim; -import animals.Bear; -import animals.Fish; -import animals.Kotik; -import animals.Deer; -import animals.Duck; -import animals.Sheep; +import animals.*; import employee.Worker; import food.Grass; import food.Meat; +import model.Aviary; +import model.Size; import java.util.ArrayList; import java.util.List; @@ -17,6 +12,9 @@ public class Zoo { private static final List allAnimals = new ArrayList<>(); + private static final Aviary carnivorousAviary = new Aviary<>(Size.LARGE); + private static final Aviary herbivoreAviary = new Aviary<>(Size.MEDIUM); + public static void main(String[] args) { System.out.println("Зоопарк: "); @@ -41,17 +39,9 @@ public class Zoo { Grass grass = new Grass(); Meat meat = new Meat(); - kotik1.run(); - bear1.run(); - duck1.fly(); - fish1.swim(); - - worker1.feed(bear1, grass); worker1.feed(kotik1, meat); - worker1.feed(fish1, meat); - worker2.feed(deer1, grass); worker2.feed(duck1, grass); - worker2.feed(sheep1, meat); + //worker2.feed(sheep1, meat); Duck duck2 = new Duck(); Worker worker3 = new Worker(); @@ -80,6 +70,24 @@ public class Zoo { else { System.out.println("В пруду никого нет."); } + + fillCarnivorousAviary(); + fillHerbivoreAviary(); + + if(getCarnivorous("Белла") != null){ + System.out.println(getCarnivorous("Белла")); + } + else { + System.out.println("Животное с именем 'Белла' не найдено"); + } + + if(getHerbivore("Бека") != null){ + System.out.println(getHerbivore("Бека")); + } + else { + System.out.println("Животное с именем 'Белла' не найдено"); + } + } public static Swim[] createPond(){ @@ -93,4 +101,23 @@ public class Zoo { return pondList.toArray(new Swim[0]); } + + public static void fillCarnivorousAviary(){ + carnivorousAviary.addAnimal(new Bear ("Маша")); + carnivorousAviary.addAnimal(new Bear("Белла")); + } + + public static void fillHerbivoreAviary(){ + herbivoreAviary.addAnimal(new Deer ("Аня")); + herbivoreAviary.addAnimal(new Deer("Олли")); + herbivoreAviary.addAnimal(new Sheep("Бека")); + } + + public static Animal getCarnivorous(String name){ + return carnivorousAviary.getAnimal(name); + } + + public static Animal getHerbivore(String name){ + return herbivoreAviary.getAnimal(name); + } } diff --git a/src/main/java/animals/Animal.java b/src/main/java/animals/Animal.java index 96ead23..0772862 100644 --- a/src/main/java/animals/Animal.java +++ b/src/main/java/animals/Animal.java @@ -1,5 +1,7 @@ package animals; +import food.WrongFoodException; +import model.Size; import food.Food; public abstract class Animal { @@ -22,7 +24,7 @@ public abstract class Animal { this.satiety = satiety; } - public abstract void eat(Food food); + public abstract void eat(Food food) throws WrongFoodException; public Animal() { } @@ -31,4 +33,6 @@ public abstract class Animal { this.name = name; this.satiety = 2; } + + public abstract Size getSize(); } diff --git a/src/main/java/animals/Bear.java b/src/main/java/animals/Bear.java index 872d3b7..4900404 100644 --- a/src/main/java/animals/Bear.java +++ b/src/main/java/animals/Bear.java @@ -1,7 +1,14 @@ package animals; +import model.Size; + public class Bear extends Carnivorous implements Run, Voice { + @Override + public Size getSize() { + return Size.LARGE; + } + public Bear(String name) { super(name); this.setSatiety(2); diff --git a/src/main/java/animals/Carnivorous.java b/src/main/java/animals/Carnivorous.java index c1439f4..cec56c0 100644 --- a/src/main/java/animals/Carnivorous.java +++ b/src/main/java/animals/Carnivorous.java @@ -1,6 +1,7 @@ package animals; import food.Food; import food.Meat; +import food.WrongFoodException; public abstract class Carnivorous extends Animal{ @@ -11,7 +12,7 @@ public abstract class Carnivorous extends Animal{ } @Override - public void eat(Food food) { + public void eat(Food food) throws WrongFoodException { int satiety = this.getSatiety(); if (food instanceof Meat) { satiety += food.getEnergy(); @@ -19,7 +20,7 @@ public abstract class Carnivorous extends Animal{ System.out.println("Животное ест."); } else { - System.out.println("Не получилось. Это животное ест только мясо."); + throw new WrongFoodException("Это животное хищник, ест только мясо."); } } } diff --git a/src/main/java/animals/Deer.java b/src/main/java/animals/Deer.java index c462783..e83b714 100644 --- a/src/main/java/animals/Deer.java +++ b/src/main/java/animals/Deer.java @@ -1,7 +1,14 @@ package animals; +import model.Size; + public class Deer extends Herbivore implements Run { + @Override + public Size getSize() { + return Size.MEDIUM; + } + public Deer(String name) { super(name); this.setSatiety(2); diff --git a/src/main/java/animals/Duck.java b/src/main/java/animals/Duck.java index cc946c5..5c8a110 100644 --- a/src/main/java/animals/Duck.java +++ b/src/main/java/animals/Duck.java @@ -1,7 +1,14 @@ package animals; +import model.Size; + public class Duck extends Herbivore implements Run, Swim, Fly, Voice { + @Override + public Size getSize() { + return Size.SMALL; + } + public Duck(String name) { super(name); this.setSatiety(2); diff --git a/src/main/java/animals/Fish.java b/src/main/java/animals/Fish.java index 025bb9a..4d2cebd 100644 --- a/src/main/java/animals/Fish.java +++ b/src/main/java/animals/Fish.java @@ -1,7 +1,14 @@ package animals; +import model.Size; + public class Fish extends Carnivorous implements Swim { + @Override + public Size getSize() { + return Size.MEDIUM; + } + public Fish(String name) { super(name); this.setSatiety(2); diff --git a/src/main/java/animals/Herbivore.java b/src/main/java/animals/Herbivore.java index 48ac472..3fefe62 100644 --- a/src/main/java/animals/Herbivore.java +++ b/src/main/java/animals/Herbivore.java @@ -1,6 +1,7 @@ package animals; import food.Food; import food.Grass; +import food.WrongFoodException; public abstract class Herbivore extends Animal{ @@ -11,7 +12,7 @@ public abstract class Herbivore extends Animal{ } @Override - public void eat(Food food) { + public void eat(Food food) throws WrongFoodException { int satiety = this.getSatiety(); if (food instanceof Grass) { satiety += food.getEnergy(); @@ -19,7 +20,7 @@ public abstract class Herbivore extends Animal{ System.out.println("Животное ест."); } else { - System.out.println("Не получилось. Это животное ест только траву."); + throw new WrongFoodException("Это животное тровоядное, ест только траву."); } } } diff --git a/src/main/java/animals/Kotik.java b/src/main/java/animals/Kotik.java index 198c42a..8332e51 100644 --- a/src/main/java/animals/Kotik.java +++ b/src/main/java/animals/Kotik.java @@ -1,7 +1,14 @@ package animals; +import model.Size; + public class Kotik extends Carnivorous implements Run, Voice { + @Override + public Size getSize() { + return Size.SMALL; + } + public Kotik(String name) { super(name); this.setSatiety(2); diff --git a/src/main/java/animals/Sheep.java b/src/main/java/animals/Sheep.java index a9e7add..ca3e864 100644 --- a/src/main/java/animals/Sheep.java +++ b/src/main/java/animals/Sheep.java @@ -1,7 +1,14 @@ package animals; +import model.Size; + public class Sheep extends Herbivore implements Run, Voice { + @Override + public Size getSize() { + return Size.MEDIUM; + } + public Sheep(String name) { super(name); this.setSatiety(2); diff --git a/src/main/java/employee/Worker.java b/src/main/java/employee/Worker.java index 66113dd..c281550 100644 --- a/src/main/java/employee/Worker.java +++ b/src/main/java/employee/Worker.java @@ -5,6 +5,7 @@ import animals.Voice; import food.Food; import food.Grass; import food.Meat; +import food.WrongFoodException; public class Worker { private String Name; @@ -23,12 +24,17 @@ public class Worker { if (food instanceof Grass) type = " травой. "; if (food instanceof Meat) type = " мясом. "; - if (this.Name != null && animal.getName() != null) { - System.out.println(this.getName() + " кормит животное " + animal.getName() + type); - animal.eat(food); + try { + if (this.Name != null && animal.getName() != null) { + System.out.println(this.getName() + " кормит животное " + animal.getName() + type); + animal.eat(food); + } + else{ + animal.eat(food); + } } - else{ - animal.eat(food); + catch (WrongFoodException e){ + e.printStackTrace(); } } diff --git a/src/main/java/food/WrongFoodException.java b/src/main/java/food/WrongFoodException.java new file mode 100644 index 0000000..1bbf9ab --- /dev/null +++ b/src/main/java/food/WrongFoodException.java @@ -0,0 +1,7 @@ +package food; + +public class WrongFoodException extends Exception { + public WrongFoodException(String message) { + super(message); + } +} diff --git a/src/main/java/model/Aviary.java b/src/main/java/model/Aviary.java new file mode 100644 index 0000000..fd81716 --- /dev/null +++ b/src/main/java/model/Aviary.java @@ -0,0 +1,48 @@ +package model; + +import animals.Animal; +import java.util.HashMap; + +public class Aviary{ + + private Size size; + + public Aviary(Size size){ + this.size = size; + } + + public Size getSize() { + return size; + } + + public void setSize(Size size) { + this.size = size; + } + + private HashMap map = new HashMap<>(); + + public void addAnimal(A animal){ + if (animal.getSize() != this.size){ + throw new WrongSizeException("Размер животного - " + animal.getSize() + ", не подходит размеру вальера - " + this.size); + } + else { + map.put(animal.getName(), animal); + } + } + + public A getAnimal(String name){ + return map.get(name); + } + + public boolean removeAnimal(String name){ + return map.remove(name, getAnimal(name)); + } + + public HashMap getMap() { + return map; + } + + public void setMap(HashMap map) { + this.map = map; + } +} diff --git a/src/main/java/model/Size.java b/src/main/java/model/Size.java new file mode 100644 index 0000000..00136de --- /dev/null +++ b/src/main/java/model/Size.java @@ -0,0 +1,5 @@ +package model; + +public enum Size { + SMALL, MEDIUM, LARGE +} diff --git a/src/main/java/model/WrongSizeException.java b/src/main/java/model/WrongSizeException.java new file mode 100644 index 0000000..c617d41 --- /dev/null +++ b/src/main/java/model/WrongSizeException.java @@ -0,0 +1,7 @@ +package model; + +public class WrongSizeException extends RuntimeException { + public WrongSizeException(String message) { + super(message); + } +}