diff --git a/README.md b/README.md index 9409591..d77f5e2 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ 5. Git создаст локальную копию удаленного репозитория в текущем каталоге. Локальную копию вы можете изменять и синхронизировать с удалённым репозиторием по мере необходимости. # Как создать Pull Request -Идём в НАШ удаленный репозиторий на GitHub (не в вашу копию, а именно в НАШ репозиторий). Так как мы только что сделали push с решением задачи в свою ветку, то сразу же видим сообщение с предложением создать Pull Request. +Идём в НАШ удаленный репозиторий на GitHub (в свою копию или в наш, по идее не важно). Так как мы только что сделали push с решением задачи в свою ветку, то сразу же видим сообщение с предложением создать Pull Request. Жмём на зеленую кнопку. ![Image1](https://github.com/FAANG-School/exceptions_workshop/blob/master/images/image1.png) Если не видите эту жёлтую всплывашку, то просто перейдите во вкладку Pull requests сверху, и нажмите зеленую кнопку там. diff --git a/build/classes/java/main/task_1/TimeMachine.class b/build/classes/java/main/task_1/TimeMachine.class new file mode 100644 index 0000000..c7d0d51 Binary files /dev/null and b/build/classes/java/main/task_1/TimeMachine.class differ diff --git a/build/classes/java/main/task_1/TimeTravelException.class b/build/classes/java/main/task_1/TimeTravelException.class new file mode 100644 index 0000000..1307998 Binary files /dev/null and b/build/classes/java/main/task_1/TimeTravelException.class differ diff --git a/build/classes/java/main/task_1/TimeTraveler.class b/build/classes/java/main/task_1/TimeTraveler.class new file mode 100644 index 0000000..11a33b7 Binary files /dev/null and b/build/classes/java/main/task_1/TimeTraveler.class differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..e874e99 Binary files /dev/null and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/task_1/TimeMachine.java b/src/main/java/task_1/TimeMachine.java new file mode 100644 index 0000000..8e7c019 --- /dev/null +++ b/src/main/java/task_1/TimeMachine.java @@ -0,0 +1,46 @@ +package task_1; + +public class TimeMachine { + + private int currentYear; + private boolean isWorking; + + public TimeMachine(int currentYear, boolean isWorking) { + this.currentYear = currentYear; + this.isWorking = isWorking; + } + + public void travelInTime(TimeTraveler timeTraveler, int yearInTheFuture) { + if (!isWorking) { + throw new TimeTravelException("The time machine is not working at the moment!"); + } + if (yearInTheFuture < timeTraveler.getBirthYear()) { + throw new TimeTravelException("The traveler has not yet been born!"); + } + if (yearInTheFuture > timeTraveler.getDeathYear()) { + throw new TimeTravelException("The traveler has already died!"); + } + System.out.println("The trip was successful! The traveler " + timeTraveler.getName() + " is in " + yearInTheFuture + "."); + } + + public static void main(String[] args) { + TimeMachine timeMachineOne = new TimeMachine(2023, true); + TimeMachine timeMachineTwo = new TimeMachine(2000, false); + + TimeTraveler timeTravelerOne = new TimeTraveler("Alex", 1996, 2060); + TimeTraveler timeTravelerTwo = new TimeTraveler("Mike", 2025, 2080); + TimeTraveler timeTravelerThree = new TimeTraveler("Kate", 2080, 2150); + + // исключение "The traveler has already died!" + timeMachineOne.travelInTime(timeTravelerOne, 2070); + + // успешное выполнение программы + timeMachineOne.travelInTime(timeTravelerTwo, 2070); + + // исключение "The traveler has not yet been born!" + timeMachineOne.travelInTime(timeTravelerThree, 2070); + + // исключение "The time machine is not working at the moment!" + timeMachineTwo.travelInTime(timeTravelerOne, 2070); + } +} \ No newline at end of file diff --git a/src/main/java/task_1/TimeTravelException.java b/src/main/java/task_1/TimeTravelException.java new file mode 100644 index 0000000..c358f92 --- /dev/null +++ b/src/main/java/task_1/TimeTravelException.java @@ -0,0 +1,7 @@ +package task_1; + +public class TimeTravelException extends RuntimeException { + public TimeTravelException(String massage) { + super(massage); + } +} diff --git a/src/main/java/task_1/TimeTraveler.java b/src/main/java/task_1/TimeTraveler.java new file mode 100644 index 0000000..74e098c --- /dev/null +++ b/src/main/java/task_1/TimeTraveler.java @@ -0,0 +1,26 @@ +package task_1; + +public class TimeTraveler { + + private final String name; + private final int birthYear; + private final int deathYear; + + public TimeTraveler(String name, int birthYear, int deathYear) { + this.name = name; + this.birthYear = birthYear; + this.deathYear = deathYear; + } + + public String getName() { + return name; + } + + public int getBirthYear() { + return birthYear; + } + + public int getDeathYear() { + return deathYear; + } +} diff --git a/src/main/java/task_1/clues/clue_3.md b/src/main/java/task_1/clues/clue_3.md index aa177d6..fa964b6 100644 --- a/src/main/java/task_1/clues/clue_3.md +++ b/src/main/java/task_1/clues/clue_3.md @@ -2,4 +2,5 @@ а затем проверьте год, в который нужно путешествовать. Для этого сравните год путешествия с годом рождение и смерти. В случае не выполнения условий выкиньте исключение с +помощью ключевого слова `throw`. помощью ключевого слова `throw`. \ No newline at end of file diff --git a/src/main/java/task_2/NotEnoughMaterialException.java b/src/main/java/task_2/NotEnoughMaterialException.java new file mode 100644 index 0000000..eb4c706 --- /dev/null +++ b/src/main/java/task_2/NotEnoughMaterialException.java @@ -0,0 +1,7 @@ +package task_2; + +public class NotEnoughMaterialException extends RuntimeException { + public NotEnoughMaterialException(String coreMaterial) { + super("There is not enough \"" + coreMaterial + "\" for the production of sticks!"); + } +} diff --git a/src/main/java/task_2/NotEnoughWoodException.java b/src/main/java/task_2/NotEnoughWoodException.java new file mode 100644 index 0000000..dc1681b --- /dev/null +++ b/src/main/java/task_2/NotEnoughWoodException.java @@ -0,0 +1,7 @@ +package task_2; + +public class NotEnoughWoodException extends RuntimeException { + public NotEnoughWoodException(String woodType) { + super("There is not enough \"" + woodType + "\" for the production of sticks!"); + } +} diff --git a/src/main/java/task_2/OlivandersShop.java b/src/main/java/task_2/OlivandersShop.java new file mode 100644 index 0000000..9c51224 --- /dev/null +++ b/src/main/java/task_2/OlivandersShop.java @@ -0,0 +1,102 @@ +package task_2; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class OlivandersShop { + + private Map woodTypeCount; + private Map coreMaterialCount; + private List orders = new ArrayList<>(); + + public Map getWoodTypeCount() { + return woodTypeCount; + } + + public Map getCoreMaterialCount() { + return coreMaterialCount; + } + + public void setWoodTypeCount(Map woodTypeCount) { + this.woodTypeCount = woodTypeCount; + } + + public void setCoreMaterialCount(Map coreMaterialCount) { + this.coreMaterialCount = coreMaterialCount; + } + + public void placeOrder(WandOrder order) { + String woodType = order.getWand().getWoodType(); + String coreMaterial = order.getWand().getCoreMaterial(); + + for (Map.Entry woodTypeCnt : woodTypeCount.entrySet()) { + if (woodTypeCnt.getKey().equals(woodType)) { + if (woodTypeCnt.getValue() >= order.getQuantity()) { + for (Map.Entry coreMaterialCnt : coreMaterialCount.entrySet()) { + if (coreMaterialCnt.getKey().equals(coreMaterial)) { + if (coreMaterialCnt.getValue() >= order.getQuantity()) { + orders.add(order); + } else { + throw new NotEnoughMaterialException(coreMaterial); + } + } + } + } else { + throw new NotEnoughWoodException(woodType); + } + } + } + } + + public Wand findMostPowerfulWand() { + if (orders.isEmpty()) { + throw new OrdersListIsEmptyException(); + } + Wand mostPowerfulWand = orders.get(0).getWand(); + for (WandOrder wandOrder : orders) { + if (wandOrder.getWand().getPowerLevel() > mostPowerfulWand.getPowerLevel()) { + mostPowerfulWand = wandOrder.getWand(); + } + } + return mostPowerfulWand; + } + + public static void main(String[] args) { + OlivandersShop olivandersShop = new OlivandersShop(); + + olivandersShop.setWoodTypeCount(new HashMap<>()); + + olivandersShop.getWoodTypeCount().put("Acacia", 30); + olivandersShop.getWoodTypeCount().put("Beech", 25); + olivandersShop.getWoodTypeCount().put("Elder", 40); + olivandersShop.getWoodTypeCount().put("Vine", 10); + olivandersShop.getWoodTypeCount().put("Willow", 15); + olivandersShop.getWoodTypeCount().put("Cedar", 35); + olivandersShop.getWoodTypeCount().put("Yew", 20); + + olivandersShop.setCoreMaterialCount(new HashMap<>()); + + olivandersShop.getCoreMaterialCount().put("Phoenix feather", 30); + olivandersShop.getCoreMaterialCount().put("Thestral tail hair", 40); + olivandersShop.getCoreMaterialCount().put("Unicorn hair", 25); + olivandersShop.getCoreMaterialCount().put("Dragon heartstring", 10); + + Wand wandOne = new Wand("Acacia", 15.3, "Unicorn hair", 100); + Wand wandTwo = new Wand("Cedar", 13.8, "Thestral tail hair", 150); + Wand wandThree = new Wand("Willow", 14.8, "Dragon heartstring", 90); + + WandOrder wandOrderOne = new WandOrder("CustomerOne", wandOne, 10); + WandOrder wandOrderTwo = new WandOrder("CustomerOne", wandTwo, 20); + WandOrder wandOrderThree = new WandOrder("CustomerTwo", wandTwo, 5); + WandOrder wandOrderFour = new WandOrder("CustomerTwo", wandThree, 9); + + olivandersShop.placeOrder(wandOrderOne); + olivandersShop.placeOrder(wandOrderTwo); + olivandersShop.placeOrder(wandOrderThree); + olivandersShop.placeOrder(wandOrderFour); + + System.out.println(olivandersShop.findMostPowerfulWand()); + } +} \ No newline at end of file diff --git a/src/main/java/task_2/OrdersListIsEmptyException.java b/src/main/java/task_2/OrdersListIsEmptyException.java new file mode 100644 index 0000000..af27d12 --- /dev/null +++ b/src/main/java/task_2/OrdersListIsEmptyException.java @@ -0,0 +1,7 @@ +package task_2; + +public class OrdersListIsEmptyException extends RuntimeException { + public OrdersListIsEmptyException() { + super("The list of orders is empty!"); + } +} diff --git a/src/main/java/task_2/Wand.java b/src/main/java/task_2/Wand.java new file mode 100644 index 0000000..9820a2c --- /dev/null +++ b/src/main/java/task_2/Wand.java @@ -0,0 +1,47 @@ +package task_2; + +public class Wand { + + private String woodType; + private double length; + private String coreMaterial; + private int powerLevel; + + public Wand(String woodType, double length, String coreMaterial, int powerLevel) { + if (woodType.isEmpty()) { + throw new IllegalArgumentException("The \"woodType\" field should not be empty!"); + } + if (length <= 0) { + throw new IllegalArgumentException("The \"length\" field should not be <= 0!"); + } + if (coreMaterial.isEmpty()) { + throw new IllegalArgumentException("The \"coreMaterial\" field should not be empty!"); + } + if (powerLevel <= 0) { + throw new IllegalArgumentException("The \"powerLevel\" field should not be <= 0!"); + } + this.woodType = woodType; + this.length = length; + this.coreMaterial = coreMaterial; + this.powerLevel = powerLevel; + + } + + public String getWoodType() { + return woodType; + } + + public String getCoreMaterial() { + return coreMaterial; + } + + public int getPowerLevel() { + return powerLevel; + } + + @Override + public String toString() { + return "Wand [" + "woodType: " + woodType + "; length: " + length + "; coreMaterial: " + + coreMaterial + "; powerLevel: " + powerLevel + "]."; + } +} diff --git a/src/main/java/task_2/WandOrder.java b/src/main/java/task_2/WandOrder.java new file mode 100644 index 0000000..1274939 --- /dev/null +++ b/src/main/java/task_2/WandOrder.java @@ -0,0 +1,28 @@ +package task_2; + +public class WandOrder { + + private final String customerName; + private Wand wand; + private int quantity; + + public WandOrder(String customerName, Wand wand, int quantity) { + if (customerName.isEmpty()) { + throw new IllegalArgumentException("The \"customerName\" field should not be empty!"); + } + if (quantity <= 0) { + throw new IllegalArgumentException("The \"quantity\" field should not be <= 0!"); + } + this.customerName = customerName; + this.wand = wand; + this.quantity = quantity; + } + + public Wand getWand() { + return wand; + } + + public int getQuantity() { + return quantity; + } +}