From b318f57bbf7cf43dfbae2933ca257c8a0e84f598 Mon Sep 17 00:00:00 2001 From: Frolov Georgy Date: Wed, 27 Oct 2021 23:03:36 +0300 Subject: [PATCH 1/6] Homework 5 completed --- .gitignore | 3 +- .../complexnumber/frolov/ComplexNumber.java | 122 ++++++++++++++++++ .../courses/farm/frolov/Application.java | 31 +++++ .../courses/farm/frolov/FarmerAbobus.java | 62 +++++++++ .../courses/farm/frolov/animals/Cow.java | 27 ++++ .../courses/farm/frolov/animals/Goat.java | 27 ++++ .../courses/farm/frolov/animals/Pig.java | 39 ++++++ .../farm/frolov/animals/SuperAnimal.java | 26 ++++ .../courses/farm/frolov/goods/Cheese.java | 17 +++ .../courses/farm/frolov/goods/Meat.java | 21 +++ .../courses/farm/frolov/goods/Milk.java | 18 +++ .../courses/farm/frolov/goods/SuperGood.java | 40 ++++++ 12 files changed, 432 insertions(+), 1 deletion(-) create mode 100644 src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java create mode 100644 src/ru/milandr/courses/farm/frolov/Application.java create mode 100644 src/ru/milandr/courses/farm/frolov/FarmerAbobus.java create mode 100644 src/ru/milandr/courses/farm/frolov/animals/Cow.java create mode 100644 src/ru/milandr/courses/farm/frolov/animals/Goat.java create mode 100644 src/ru/milandr/courses/farm/frolov/animals/Pig.java create mode 100644 src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java create mode 100644 src/ru/milandr/courses/farm/frolov/goods/Cheese.java create mode 100644 src/ru/milandr/courses/farm/frolov/goods/Meat.java create mode 100644 src/ru/milandr/courses/farm/frolov/goods/Milk.java create mode 100644 src/ru/milandr/courses/farm/frolov/goods/SuperGood.java diff --git a/.gitignore b/.gitignore index eea6353..5303b8f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .idea *.iws *.iml -*.ipr \ No newline at end of file +*.ipr +/out/ diff --git a/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java new file mode 100644 index 0000000..a934a45 --- /dev/null +++ b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java @@ -0,0 +1,122 @@ +package ru.milandr.courses.complexnumber.frolov; + +import ru.milandr.courses.complexnumber.ComplexNumberInterface; + +public class ComplexNumber implements ComplexNumberInterface { + + private final double real; + private final double imagine; + + public ComplexNumber(double a, double b) { + this.real = a; + this.imagine = b; + } + + @Override + public String toString() { + String singOfImagine = imagine > 0 ? "+" : "-"; + return String.format("z = %.2f %s %.2f i", real, singOfImagine, Math.abs(imagine)); + } + + @Override + public ComplexNumberInterface add(ComplexNumberInterface anotherNumber) { + // как лучше реализовать эту повторяющуюся проверку в отдельном методе? + if (!(anotherNumber instanceof ComplexNumber)) { + System.out.println("Wrong instance"); + return null; + } + return new ComplexNumber((real + ((ComplexNumber) anotherNumber).real), (imagine + ((ComplexNumber) anotherNumber).imagine)); + } + + @Override + public ComplexNumberInterface subtract(ComplexNumberInterface anotherNumber) { + if (!(anotherNumber instanceof ComplexNumber)) { + System.out.println("Wrong instance"); + return null; + } + return new ComplexNumber((real - ((ComplexNumber) anotherNumber).real), (imagine - ((ComplexNumber) anotherNumber).imagine)); + } + + @Override + public ComplexNumberInterface multiply(ComplexNumberInterface anotherNumber) { + if (!(anotherNumber instanceof ComplexNumber)) { + System.out.println("Wrong instance"); + return null; + } + double newReal = (real * ((ComplexNumber) anotherNumber).real - imagine * ((ComplexNumber) anotherNumber).imagine); + double newImagine = real * ((ComplexNumber) anotherNumber).imagine + imagine * ((ComplexNumber) anotherNumber).real; + return new ComplexNumber(newReal, newImagine); + } + + @Override + public ComplexNumberInterface divide(ComplexNumberInterface anotherNumber) { + if (!(anotherNumber instanceof ComplexNumber)) { + System.out.println("Wrong instance"); + return null; + } + double newReal = (real * ((ComplexNumber) anotherNumber).real + imagine * ((ComplexNumber) anotherNumber).real) / (Math.pow(((ComplexNumber) anotherNumber).real, 2) + Math.pow(((ComplexNumber) anotherNumber).imagine, 2)); + double newImagine = (((ComplexNumber) anotherNumber).real * imagine - real * ((ComplexNumber) anotherNumber).imagine) / (Math.pow(((ComplexNumber) anotherNumber).real, 2) + Math.pow(((ComplexNumber) anotherNumber).imagine, 2)); + return new ComplexNumber(newReal, newImagine); + } + + @Override + public ComplexNumberInterface negate() { + double newReal = real * -1; + double newImagine = imagine * -1; + return new ComplexNumber(newReal, newImagine); + } + + @Override + public double calculateModulus() { + return Math.sqrt(Math.pow(real, 2) + Math.pow(imagine, 2)); + } + + @Override + public double calculateArgument() { + if (imagine == 0 & real > 0) { + return Math.toRadians(0); + } + + if (imagine == 0 & real < 0) { + return Math.toRadians(180); + } + + if (real == 0 & imagine > 0) { + return Math.toRadians(90); + } + + if (real == 0 & imagine < 0) { + return Math.toRadians(270); + } + + return real >= 0 ? Math.atan(imagine / real) : Math.atan(imagine / real + Math.toRadians(90)); + } + + public static void main(String[] args) { + ComplexNumberInterface f1 = new ComplexNumber(5, 14); + System.out.println(f1); + ComplexNumberInterface f2 = new ComplexNumber(10, -6); + System.out.println(f2); + ComplexNumberInterface sum = f1.add(f2); + System.out.println("сумма: " + sum); + ComplexNumberInterface diff = f1.subtract(f2); + System.out.println("разность: " + diff); + ComplexNumberInterface multi = f1.multiply(f2); + System.out.println("умножение: " + multi); + ComplexNumberInterface div = f1.divide(f2); + System.out.println("деление: " + div); + ComplexNumberInterface negative = f1.negate(); + System.out.println("негатив: " + negative); + double mod = f1.calculateModulus(); + System.out.println("модуль: " + mod); + double arg = f1.calculateArgument(); + System.out.println("аргумент: " + arg); + + ComplexNumberInterface f3 = new ComplexNumber(0, -6); + double arg3 = f3.calculateArgument(); + System.out.println("аргумент чисто мнимого числа: " + arg3); + ComplexNumberInterface f4 = new ComplexNumber(10, 0); + double arg4 = f4.calculateArgument(); + System.out.println("аргумент действительного числа: " + arg4); + } +} diff --git a/src/ru/milandr/courses/farm/frolov/Application.java b/src/ru/milandr/courses/farm/frolov/Application.java new file mode 100644 index 0000000..de38240 --- /dev/null +++ b/src/ru/milandr/courses/farm/frolov/Application.java @@ -0,0 +1,31 @@ +package ru.milandr.courses.farm.frolov; + +import ru.milandr.courses.farm.frolov.animals.Goat; +import ru.milandr.courses.farm.frolov.animals.Pig; +import ru.milandr.courses.farm.frolov.animals.Cow; +import ru.milandr.courses.farm.frolov.goods.Cheese; +import ru.milandr.courses.farm.frolov.goods.Meat; +import ru.milandr.courses.farm.frolov.goods.Milk; + +public class Application { + public static void main(String[] args) throws InterruptedException { + FarmerAbobus abobus = new FarmerAbobus("Толик"); + Pig pepa = new Pig("Пепа"); + Goat pavlik = new Goat("Павлик"); + Cow zuzya = new Cow("Зюзя"); + Meat meat = new Meat(pepa); + Milk milk = new Milk(zuzya); + Cheese cheese = new Cheese(pavlik); + abobus.collectGoods(meat); + abobus.collectGoods(milk); + abobus.collectGoods(cheese); + System.out.println("Ждем 11 секунд, чтобы молоко испортилось"); + Thread.sleep(11000); + abobus.eatProduct(meat); + abobus.eatProduct(milk); + abobus.eatProduct(cheese); + abobus.petAnAnimal(pepa); + abobus.petAnAnimal(pavlik); + abobus.petAnAnimal(zuzya); + } +} diff --git a/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java b/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java new file mode 100644 index 0000000..a524090 --- /dev/null +++ b/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java @@ -0,0 +1,62 @@ +package ru.milandr.courses.farm.frolov; + +import ru.milandr.courses.farm.Animal; +import ru.milandr.courses.farm.GenericFarmer; +import ru.milandr.courses.farm.Good; +import ru.milandr.courses.farm.frolov.animals.SuperAnimal; +import ru.milandr.courses.farm.frolov.goods.Cheese; +import ru.milandr.courses.farm.frolov.goods.Meat; +import ru.milandr.courses.farm.frolov.goods.Milk; +import ru.milandr.courses.farm.frolov.goods.SuperGood; + +public class FarmerAbobus implements GenericFarmer { + private String name; + + public FarmerAbobus(String name) { + this.name = "Абобус " + name; + } + + @Override + public void collectGoods(Good good) { + SuperGood realGood = (SuperGood) good; + if (realGood instanceof Milk) { + System.out.println(name + " подоил корову"); + return; + } + if (realGood instanceof Cheese) { + System.out.println(name + " подоил козу и сварил сыр"); + return; + } + if (realGood instanceof Meat) { + System.out.println(name + " заколол свинью"); + } + } + + @Override + public void petAnAnimal(Animal animal) { + System.out.println(name + " погладил " + animal); + animal.produceSound(); + } + + @Override + public void eatProduct(Good good) { + SuperGood realGood = (SuperGood) good; + if (realGood instanceof Milk && !((Milk) realGood).isRotten()) { + System.out.println(name + " выпил молока"); + return; + } + if (realGood instanceof Cheese && !((Cheese) realGood).isRotten()) { + System.out.println(name + " съел козьего сыра"); + return; + } + if (realGood instanceof Meat && !((Meat) realGood).isRotten()) { + System.out.println(name + " съел мяса"); + return; + } + System.out.println("Нечего есть. Все испортилось."); + } + + public String getName() { + return name; + } +} diff --git a/src/ru/milandr/courses/farm/frolov/animals/Cow.java b/src/ru/milandr/courses/farm/frolov/animals/Cow.java new file mode 100644 index 0000000..637a1b4 --- /dev/null +++ b/src/ru/milandr/courses/farm/frolov/animals/Cow.java @@ -0,0 +1,27 @@ +package ru.milandr.courses.farm.frolov.animals; + +import ru.milandr.courses.farm.Good; +import ru.milandr.courses.farm.frolov.goods.Milk; + +public class Cow extends SuperAnimal { + + public Cow(String name) { + super(name); + } + + @Override + public String toString() { + return "Корова " + getName(); + } + + @Override + public void produceSound() { + System.out.println("му-му"); + } + + @Override + public Good produceGoods() { + return new Milk(this); + } + +} diff --git a/src/ru/milandr/courses/farm/frolov/animals/Goat.java b/src/ru/milandr/courses/farm/frolov/animals/Goat.java new file mode 100644 index 0000000..f90a934 --- /dev/null +++ b/src/ru/milandr/courses/farm/frolov/animals/Goat.java @@ -0,0 +1,27 @@ +package ru.milandr.courses.farm.frolov.animals; + +import ru.milandr.courses.farm.Good; +import ru.milandr.courses.farm.frolov.goods.Cheese; + + +public class Goat extends SuperAnimal { + + public Goat(String name) { + super(name); + } + + @Override + public String toString() { + return "Коза " + getName(); + } + + @Override + public void produceSound() { + System.out.println("бе-бе"); + } + + @Override + public Good produceGoods() { + return new Cheese(this); + } +} diff --git a/src/ru/milandr/courses/farm/frolov/animals/Pig.java b/src/ru/milandr/courses/farm/frolov/animals/Pig.java new file mode 100644 index 0000000..a808e74 --- /dev/null +++ b/src/ru/milandr/courses/farm/frolov/animals/Pig.java @@ -0,0 +1,39 @@ +package ru.milandr.courses.farm.frolov.animals; + +import ru.milandr.courses.farm.Good; +import ru.milandr.courses.farm.frolov.goods.Meat; + +public class Pig extends SuperAnimal { + private boolean isAlive; + + public Pig(String name) { + super(name); + isAlive = true; + } + + @Override + public String toString() { + return "Свинка " + getName(); + } + + @Override + public void produceSound() { + if (isAlive) { + System.out.println("хрю-хрю"); + } else { + System.out.println("<<загробные звуки>> хрю-хрю"); + } + } + + @Override + public Good produceGoods() { + if (isAlive) { + isAlive = false; + return new Meat(this); + } else { + System.out.println("Свинка " + getName() + "уже отдала свое мясо."); + return null; + } + } + +} diff --git a/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java b/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java new file mode 100644 index 0000000..b7511fd --- /dev/null +++ b/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java @@ -0,0 +1,26 @@ +package ru.milandr.courses.farm.frolov.animals; + +import ru.milandr.courses.farm.Animal; +import ru.milandr.courses.farm.Good; + +public class SuperAnimal implements Animal { + private String name; + + public SuperAnimal(String name) { + this.name = name; + } + + @Override + public void produceSound() { + System.out.println("какие-то животные звуки"); + } + + @Override + public Good produceGoods() { + return null; + } + + public String getName() { + return name; + } +} diff --git a/src/ru/milandr/courses/farm/frolov/goods/Cheese.java b/src/ru/milandr/courses/farm/frolov/goods/Cheese.java new file mode 100644 index 0000000..063b3ae --- /dev/null +++ b/src/ru/milandr/courses/farm/frolov/goods/Cheese.java @@ -0,0 +1,17 @@ +package ru.milandr.courses.farm.frolov.goods; + +import ru.milandr.courses.farm.frolov.animals.SuperAnimal; + +public class Cheese extends SuperGood { + private static final long extendedTime = 30000; + + public Cheese(SuperAnimal animal) { + super(animal); + } + + public boolean isRotten() { + long curTime = System.currentTimeMillis(); + isRotten = curTime > getCreationTime() + extendedTime; + return isRotten; + } +} diff --git a/src/ru/milandr/courses/farm/frolov/goods/Meat.java b/src/ru/milandr/courses/farm/frolov/goods/Meat.java new file mode 100644 index 0000000..d30e0b4 --- /dev/null +++ b/src/ru/milandr/courses/farm/frolov/goods/Meat.java @@ -0,0 +1,21 @@ +package ru.milandr.courses.farm.frolov.goods; + + +import ru.milandr.courses.farm.frolov.animals.Pig; +import ru.milandr.courses.farm.frolov.animals.SuperAnimal; + +public class Meat extends SuperGood { + private static final long extendedTime = 20000; + + public Meat(SuperAnimal animal) { + super(animal); + animal.produceGoods(); + } + + public boolean isRotten() { + long curTime = System.currentTimeMillis(); + isRotten = curTime > getCreationTime() + extendedTime; + return isRotten; + } + +} diff --git a/src/ru/milandr/courses/farm/frolov/goods/Milk.java b/src/ru/milandr/courses/farm/frolov/goods/Milk.java new file mode 100644 index 0000000..2838b59 --- /dev/null +++ b/src/ru/milandr/courses/farm/frolov/goods/Milk.java @@ -0,0 +1,18 @@ +package ru.milandr.courses.farm.frolov.goods; + +import ru.milandr.courses.farm.frolov.animals.SuperAnimal; + +public class Milk extends SuperGood { + private static final long extendedTime = 10000; + + public Milk(SuperAnimal animal) { + super(animal); + } + + public boolean isRotten() { + long curTime = System.currentTimeMillis(); + isRotten = curTime > getCreationTime() + extendedTime; + return isRotten; + } + +} diff --git a/src/ru/milandr/courses/farm/frolov/goods/SuperGood.java b/src/ru/milandr/courses/farm/frolov/goods/SuperGood.java new file mode 100644 index 0000000..c9eb2b7 --- /dev/null +++ b/src/ru/milandr/courses/farm/frolov/goods/SuperGood.java @@ -0,0 +1,40 @@ +package ru.milandr.courses.farm.frolov.goods; + +import ru.milandr.courses.farm.Good; +import ru.milandr.courses.farm.frolov.animals.SuperAnimal; + +public abstract class SuperGood implements Good { + protected boolean isRotten = false; + private static short count = 0; + private long creationTime; + private SuperAnimal animal; + + + public SuperGood(SuperAnimal animal) { + count++; + this.creationTime = System.currentTimeMillis(); + this.animal = animal; + } + + @Override + public void goRotten() { + isRotten = true; + count--; + } + + public void getGood() { + System.out.println("Получена продукция, всего " + count + " шт."); + } + + public void setRotten(boolean rotten) { + isRotten = rotten; + } + + public long getCreationTime() { + return creationTime; + } + + public void setCreationTime(long creationTime) { + this.creationTime = creationTime; + } +} From 4ffbe4388255d4fb173876715a80b6480410d796 Mon Sep 17 00:00:00 2001 From: Frolov Georgy Date: Fri, 29 Oct 2021 20:10:31 +0300 Subject: [PATCH 2/6] Homework 5 completed again --- .../courses/farm/frolov/Application.java | 54 ++++++++++++------- .../courses/farm/frolov/FarmerAbobus.java | 42 +++++---------- .../courses/farm/frolov/animals/Cow.java | 12 ++--- .../courses/farm/frolov/animals/Goat.java | 13 +++-- .../courses/farm/frolov/animals/Pig.java | 19 ++++--- .../farm/frolov/animals/SuperAnimal.java | 15 ++---- .../courses/farm/frolov/goods/Cheese.java | 22 ++++---- .../courses/farm/frolov/goods/Meat.java | 24 ++++----- .../courses/farm/frolov/goods/Milk.java | 19 ++++--- .../courses/farm/frolov/goods/SuperGood.java | 45 ++++++++-------- 10 files changed, 135 insertions(+), 130 deletions(-) diff --git a/src/ru/milandr/courses/farm/frolov/Application.java b/src/ru/milandr/courses/farm/frolov/Application.java index de38240..ddf7550 100644 --- a/src/ru/milandr/courses/farm/frolov/Application.java +++ b/src/ru/milandr/courses/farm/frolov/Application.java @@ -1,31 +1,49 @@ package ru.milandr.courses.farm.frolov; +import ru.milandr.courses.farm.frolov.animals.Cow; import ru.milandr.courses.farm.frolov.animals.Goat; import ru.milandr.courses.farm.frolov.animals.Pig; -import ru.milandr.courses.farm.frolov.animals.Cow; import ru.milandr.courses.farm.frolov.goods.Cheese; import ru.milandr.courses.farm.frolov.goods.Meat; import ru.milandr.courses.farm.frolov.goods.Milk; public class Application { public static void main(String[] args) throws InterruptedException { - FarmerAbobus abobus = new FarmerAbobus("Толик"); + FarmerAbobus tolyanchik = new FarmerAbobus("Толянчик"); + Pig pepa = new Pig("Пепа"); - Goat pavlik = new Goat("Павлик"); - Cow zuzya = new Cow("Зюзя"); - Meat meat = new Meat(pepa); - Milk milk = new Milk(zuzya); - Cheese cheese = new Cheese(pavlik); - abobus.collectGoods(meat); - abobus.collectGoods(milk); - abobus.collectGoods(cheese); - System.out.println("Ждем 11 секунд, чтобы молоко испортилось"); - Thread.sleep(11000); - abobus.eatProduct(meat); - abobus.eatProduct(milk); - abobus.eatProduct(cheese); - abobus.petAnAnimal(pepa); - abobus.petAnAnimal(pavlik); - abobus.petAnAnimal(zuzya); + Goat zuzya = new Goat("Зюзя"); + Cow zorka = new Cow("Зорька"); + + tolyanchik.petAnAnimal(pepa); + tolyanchik.petAnAnimal(zuzya); + tolyanchik.petAnAnimal(zorka); + + Milk milk = new Milk(); + Cheese cheese = new Cheese(); + + Meat meat = (Meat) tolyanchik.collectGoods(pepa); + + tolyanchik.collectGoods(milk); + tolyanchik.collectGoods(cheese); + + System.out.println("Ждем 5,1 сек, чтобы молоко испортилось"); + Thread.sleep(5100); + + tolyanchik.eatProduct(milk); + tolyanchik.eatProduct(cheese); + tolyanchik.eatProduct(meat); + + System.out.println("Ждем еще 2,5 сек, чтобы мясо испортилось"); + Thread.sleep(2500); + + tolyanchik.eatProduct(milk); + tolyanchik.eatProduct(cheese); + tolyanchik.eatProduct(meat); + + tolyanchik.petAnAnimal(pepa); + tolyanchik.petAnAnimal(zuzya); + tolyanchik.petAnAnimal(zorka); } } + diff --git a/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java b/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java index a524090..88a64b9 100644 --- a/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java +++ b/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java @@ -3,33 +3,27 @@ import ru.milandr.courses.farm.Animal; import ru.milandr.courses.farm.GenericFarmer; import ru.milandr.courses.farm.Good; -import ru.milandr.courses.farm.frolov.animals.SuperAnimal; -import ru.milandr.courses.farm.frolov.goods.Cheese; +import ru.milandr.courses.farm.frolov.animals.Pig; import ru.milandr.courses.farm.frolov.goods.Meat; -import ru.milandr.courses.farm.frolov.goods.Milk; import ru.milandr.courses.farm.frolov.goods.SuperGood; public class FarmerAbobus implements GenericFarmer { - private String name; + private final String name; public FarmerAbobus(String name) { - this.name = "Абобус " + name; + this.name = name; } @Override public void collectGoods(Good good) { - SuperGood realGood = (SuperGood) good; - if (realGood instanceof Milk) { - System.out.println(name + " подоил корову"); - return; - } - if (realGood instanceof Cheese) { - System.out.println(name + " подоил козу и сварил сыр"); - return; - } - if (realGood instanceof Meat) { - System.out.println(name + " заколол свинью"); - } + ((SuperGood) good).getCollected(this); + } + + // можно ли сразу перегрузить метод (не писать того, что написано выше) + public Good collectGoods(Pig pig) { + Good meat = pig.produceGoods(); + ((Meat) meat).getCollected(this); + return meat; } @Override @@ -41,19 +35,11 @@ public void petAnAnimal(Animal animal) { @Override public void eatProduct(Good good) { SuperGood realGood = (SuperGood) good; - if (realGood instanceof Milk && !((Milk) realGood).isRotten()) { - System.out.println(name + " выпил молока"); - return; - } - if (realGood instanceof Cheese && !((Cheese) realGood).isRotten()) { - System.out.println(name + " съел козьего сыра"); - return; - } - if (realGood instanceof Meat && !((Meat) realGood).isRotten()) { - System.out.println(name + " съел мяса"); + if (realGood.isRotten()) { + System.out.println("не хочу есть испорченный " + realGood); return; } - System.out.println("Нечего есть. Все испортилось."); + System.out.println(name + " употребил " + realGood); } public String getName() { diff --git a/src/ru/milandr/courses/farm/frolov/animals/Cow.java b/src/ru/milandr/courses/farm/frolov/animals/Cow.java index 637a1b4..a16134c 100644 --- a/src/ru/milandr/courses/farm/frolov/animals/Cow.java +++ b/src/ru/milandr/courses/farm/frolov/animals/Cow.java @@ -1,5 +1,6 @@ package ru.milandr.courses.farm.frolov.animals; +import ru.milandr.courses.farm.Animal; import ru.milandr.courses.farm.Good; import ru.milandr.courses.farm.frolov.goods.Milk; @@ -9,11 +10,6 @@ public Cow(String name) { super(name); } - @Override - public String toString() { - return "Корова " + getName(); - } - @Override public void produceSound() { System.out.println("му-му"); @@ -21,7 +17,11 @@ public void produceSound() { @Override public Good produceGoods() { - return new Milk(this); + return new Milk(); } + @Override + public String toString() { + return "Корова " + name; + } } diff --git a/src/ru/milandr/courses/farm/frolov/animals/Goat.java b/src/ru/milandr/courses/farm/frolov/animals/Goat.java index f90a934..e5bcd5f 100644 --- a/src/ru/milandr/courses/farm/frolov/animals/Goat.java +++ b/src/ru/milandr/courses/farm/frolov/animals/Goat.java @@ -3,18 +3,12 @@ import ru.milandr.courses.farm.Good; import ru.milandr.courses.farm.frolov.goods.Cheese; - public class Goat extends SuperAnimal { public Goat(String name) { super(name); } - @Override - public String toString() { - return "Коза " + getName(); - } - @Override public void produceSound() { System.out.println("бе-бе"); @@ -22,6 +16,11 @@ public void produceSound() { @Override public Good produceGoods() { - return new Cheese(this); + return new Cheese(); + } + + @Override + public String toString() { + return "Коза " + name; } } diff --git a/src/ru/milandr/courses/farm/frolov/animals/Pig.java b/src/ru/milandr/courses/farm/frolov/animals/Pig.java index a808e74..2a3e605 100644 --- a/src/ru/milandr/courses/farm/frolov/animals/Pig.java +++ b/src/ru/milandr/courses/farm/frolov/animals/Pig.java @@ -1,6 +1,7 @@ package ru.milandr.courses.farm.frolov.animals; import ru.milandr.courses.farm.Good; +import ru.milandr.courses.farm.frolov.FarmerAbobus; import ru.milandr.courses.farm.frolov.goods.Meat; public class Pig extends SuperAnimal { @@ -8,12 +9,7 @@ public class Pig extends SuperAnimal { public Pig(String name) { super(name); - isAlive = true; - } - - @Override - public String toString() { - return "Свинка " + getName(); + this.isAlive = true; } @Override @@ -29,11 +25,14 @@ public void produceSound() { public Good produceGoods() { if (isAlive) { isAlive = false; - return new Meat(this); - } else { - System.out.println("Свинка " + getName() + "уже отдала свое мясо."); - return null; + return new Meat(); } + System.out.println("Свинка " + name + " уже отдала свое мясо."); + return null; } + @Override + public String toString() { + return "Свинка " + name; + } } diff --git a/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java b/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java index b7511fd..1706a6d 100644 --- a/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java +++ b/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java @@ -3,22 +3,17 @@ import ru.milandr.courses.farm.Animal; import ru.milandr.courses.farm.Good; -public class SuperAnimal implements Animal { - private String name; +public abstract class SuperAnimal implements Animal { + protected String name; public SuperAnimal(String name) { this.name = name; } - @Override - public void produceSound() { - System.out.println("какие-то животные звуки"); - } + //стоит ли указывать наследуемый абстрактный метод, если здесь он не переписывается, или лучше сразу переписать в дочернем классе + public abstract void produceSound(); - @Override - public Good produceGoods() { - return null; - } + public abstract Good produceGoods(); public String getName() { return name; diff --git a/src/ru/milandr/courses/farm/frolov/goods/Cheese.java b/src/ru/milandr/courses/farm/frolov/goods/Cheese.java index 063b3ae..4368089 100644 --- a/src/ru/milandr/courses/farm/frolov/goods/Cheese.java +++ b/src/ru/milandr/courses/farm/frolov/goods/Cheese.java @@ -1,17 +1,21 @@ package ru.milandr.courses.farm.frolov.goods; -import ru.milandr.courses.farm.frolov.animals.SuperAnimal; +import ru.milandr.courses.farm.frolov.FarmerAbobus; public class Cheese extends SuperGood { - private static final long extendedTime = 30000; + private static final long CHEESE_EXTENDED_TIME_MS = 10000; - public Cheese(SuperAnimal animal) { - super(animal); + public Cheese() { + extendedTime = CHEESE_EXTENDED_TIME_MS; } - public boolean isRotten() { - long curTime = System.currentTimeMillis(); - isRotten = curTime > getCreationTime() + extendedTime; - return isRotten; + @Override + public void getCollected(FarmerAbobus farmer) { + System.out.println(farmer.getName() + " сварил сыр"); } -} + + @Override + public String toString() { + return "сыр"; + } +} \ No newline at end of file diff --git a/src/ru/milandr/courses/farm/frolov/goods/Meat.java b/src/ru/milandr/courses/farm/frolov/goods/Meat.java index d30e0b4..a452c7d 100644 --- a/src/ru/milandr/courses/farm/frolov/goods/Meat.java +++ b/src/ru/milandr/courses/farm/frolov/goods/Meat.java @@ -1,21 +1,21 @@ package ru.milandr.courses.farm.frolov.goods; - -import ru.milandr.courses.farm.frolov.animals.Pig; -import ru.milandr.courses.farm.frolov.animals.SuperAnimal; +import ru.milandr.courses.farm.frolov.FarmerAbobus; public class Meat extends SuperGood { - private static final long extendedTime = 20000; + private static final long MEAT_EXTENDED_TIME_MS = 7500; - public Meat(SuperAnimal animal) { - super(animal); - animal.produceGoods(); + public Meat() { + extendedTime = MEAT_EXTENDED_TIME_MS; } - public boolean isRotten() { - long curTime = System.currentTimeMillis(); - isRotten = curTime > getCreationTime() + extendedTime; - return isRotten; + @Override + public void getCollected(FarmerAbobus farmer) { + System.out.println(farmer.getName() + " заколол порося"); } -} + @Override + public String toString() { + return "мясо"; + } +} \ No newline at end of file diff --git a/src/ru/milandr/courses/farm/frolov/goods/Milk.java b/src/ru/milandr/courses/farm/frolov/goods/Milk.java index 2838b59..a89ad30 100644 --- a/src/ru/milandr/courses/farm/frolov/goods/Milk.java +++ b/src/ru/milandr/courses/farm/frolov/goods/Milk.java @@ -1,18 +1,21 @@ package ru.milandr.courses.farm.frolov.goods; -import ru.milandr.courses.farm.frolov.animals.SuperAnimal; +import ru.milandr.courses.farm.frolov.FarmerAbobus; public class Milk extends SuperGood { - private static final long extendedTime = 10000; + private static final long MILK_EXTENDED_TIME_MS = 5000; - public Milk(SuperAnimal animal) { - super(animal); + public Milk() { + extendedTime = MILK_EXTENDED_TIME_MS; } - public boolean isRotten() { - long curTime = System.currentTimeMillis(); - isRotten = curTime > getCreationTime() + extendedTime; - return isRotten; + @Override + public void getCollected(FarmerAbobus farmer) { + System.out.println(farmer.getName() + " подоил корову"); } + @Override + public String toString() { + return "молоко"; + } } diff --git a/src/ru/milandr/courses/farm/frolov/goods/SuperGood.java b/src/ru/milandr/courses/farm/frolov/goods/SuperGood.java index c9eb2b7..90dff20 100644 --- a/src/ru/milandr/courses/farm/frolov/goods/SuperGood.java +++ b/src/ru/milandr/courses/farm/frolov/goods/SuperGood.java @@ -1,40 +1,41 @@ package ru.milandr.courses.farm.frolov.goods; import ru.milandr.courses.farm.Good; -import ru.milandr.courses.farm.frolov.animals.SuperAnimal; +import ru.milandr.courses.farm.frolov.FarmerAbobus; public abstract class SuperGood implements Good { - protected boolean isRotten = false; - private static short count = 0; - private long creationTime; - private SuperAnimal animal; + private boolean isRotten; + private final long creationTime; + protected long extendedTime; - - public SuperGood(SuperAnimal animal) { - count++; - this.creationTime = System.currentTimeMillis(); - this.animal = animal; + public SuperGood() { + isRotten = false; + creationTime = System.currentTimeMillis(); } @Override public void goRotten() { - isRotten = true; - count--; + if (isRotten) { + System.out.println(this + " уже испорчено"); + return; + } + if (checkTime()) { + System.out.println(this + " испортилось"); + return; + } + System.out.println("Срок годности" + this + " еще не закончился"); } - public void getGood() { - System.out.println("Получена продукция, всего " + count + " шт."); - } - public void setRotten(boolean rotten) { - isRotten = rotten; - } + public abstract void getCollected(FarmerAbobus farmer); - public long getCreationTime() { - return creationTime; + public boolean isRotten() { + isRotten = checkTime(); + return isRotten; } - public void setCreationTime(long creationTime) { - this.creationTime = creationTime; + private boolean checkTime() { + return System.currentTimeMillis() > creationTime + extendedTime; } + } From 470523edec18224e1e0483846274b9c6303d8d14 Mon Sep 17 00:00:00 2001 From: Frolov Georgy Date: Fri, 29 Oct 2021 20:21:09 +0300 Subject: [PATCH 3/6] edit ComplexNumber --- .../complexnumber/frolov/ComplexNumber.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java index a934a45..4a891a5 100644 --- a/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java +++ b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java @@ -14,8 +14,8 @@ public ComplexNumber(double a, double b) { @Override public String toString() { - String singOfImagine = imagine > 0 ? "+" : "-"; - return String.format("z = %.2f %s %.2f i", real, singOfImagine, Math.abs(imagine)); + String signOfImagine = imagine > 0 ? "+" : "-"; + return String.format("z = %.2f %s %.2f i", real, signOfImagine, Math.abs(imagine)); } @Override @@ -25,7 +25,8 @@ public ComplexNumberInterface add(ComplexNumberInterface anotherNumber) { System.out.println("Wrong instance"); return null; } - return new ComplexNumber((real + ((ComplexNumber) anotherNumber).real), (imagine + ((ComplexNumber) anotherNumber).imagine)); + ComplexNumber myNumber = (ComplexNumber) anotherNumber; + return new ComplexNumber((real + myNumber.real), (imagine + myNumber.imagine)); } @Override @@ -34,7 +35,8 @@ public ComplexNumberInterface subtract(ComplexNumberInterface anotherNumber) { System.out.println("Wrong instance"); return null; } - return new ComplexNumber((real - ((ComplexNumber) anotherNumber).real), (imagine - ((ComplexNumber) anotherNumber).imagine)); + ComplexNumber myNumber = (ComplexNumber) anotherNumber; + return new ComplexNumber((real - myNumber.real), (imagine - myNumber.imagine)); } @Override @@ -43,8 +45,9 @@ public ComplexNumberInterface multiply(ComplexNumberInterface anotherNumber) { System.out.println("Wrong instance"); return null; } - double newReal = (real * ((ComplexNumber) anotherNumber).real - imagine * ((ComplexNumber) anotherNumber).imagine); - double newImagine = real * ((ComplexNumber) anotherNumber).imagine + imagine * ((ComplexNumber) anotherNumber).real; + ComplexNumber myNumber = (ComplexNumber) anotherNumber; + double newReal = (real * myNumber.real - imagine * myNumber.imagine); + double newImagine = real * myNumber.imagine + imagine * myNumber.real; return new ComplexNumber(newReal, newImagine); } @@ -54,8 +57,10 @@ public ComplexNumberInterface divide(ComplexNumberInterface anotherNumber) { System.out.println("Wrong instance"); return null; } - double newReal = (real * ((ComplexNumber) anotherNumber).real + imagine * ((ComplexNumber) anotherNumber).real) / (Math.pow(((ComplexNumber) anotherNumber).real, 2) + Math.pow(((ComplexNumber) anotherNumber).imagine, 2)); - double newImagine = (((ComplexNumber) anotherNumber).real * imagine - real * ((ComplexNumber) anotherNumber).imagine) / (Math.pow(((ComplexNumber) anotherNumber).real, 2) + Math.pow(((ComplexNumber) anotherNumber).imagine, 2)); + ComplexNumber myNumber = (ComplexNumber) anotherNumber; + double v = Math.pow(myNumber.real, 2) + Math.pow(myNumber.imagine, 2); + double newReal = (real * myNumber.real + imagine * myNumber.real) / v; + double newImagine = (myNumber.real * imagine - real * (myNumber.imagine)) / v; return new ComplexNumber(newReal, newImagine); } From 6b97418198a0bd2395930e30d124915c48cb764d Mon Sep 17 00:00:00 2001 From: Frolov Georgy Date: Tue, 2 Nov 2021 13:25:05 +0300 Subject: [PATCH 4/6] deleted unused imports, added constant names for goods --- src/ru/milandr/courses/farm/frolov/FarmerAbobus.java | 1 - src/ru/milandr/courses/farm/frolov/animals/Cow.java | 1 - src/ru/milandr/courses/farm/frolov/animals/Pig.java | 1 - src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java | 6 ------ src/ru/milandr/courses/farm/frolov/goods/Cheese.java | 3 ++- src/ru/milandr/courses/farm/frolov/goods/Meat.java | 3 ++- src/ru/milandr/courses/farm/frolov/goods/Milk.java | 3 ++- 7 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java b/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java index 88a64b9..1692884 100644 --- a/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java +++ b/src/ru/milandr/courses/farm/frolov/FarmerAbobus.java @@ -19,7 +19,6 @@ public void collectGoods(Good good) { ((SuperGood) good).getCollected(this); } - // можно ли сразу перегрузить метод (не писать того, что написано выше) public Good collectGoods(Pig pig) { Good meat = pig.produceGoods(); ((Meat) meat).getCollected(this); diff --git a/src/ru/milandr/courses/farm/frolov/animals/Cow.java b/src/ru/milandr/courses/farm/frolov/animals/Cow.java index a16134c..0f95796 100644 --- a/src/ru/milandr/courses/farm/frolov/animals/Cow.java +++ b/src/ru/milandr/courses/farm/frolov/animals/Cow.java @@ -1,6 +1,5 @@ package ru.milandr.courses.farm.frolov.animals; -import ru.milandr.courses.farm.Animal; import ru.milandr.courses.farm.Good; import ru.milandr.courses.farm.frolov.goods.Milk; diff --git a/src/ru/milandr/courses/farm/frolov/animals/Pig.java b/src/ru/milandr/courses/farm/frolov/animals/Pig.java index 2a3e605..3c2733a 100644 --- a/src/ru/milandr/courses/farm/frolov/animals/Pig.java +++ b/src/ru/milandr/courses/farm/frolov/animals/Pig.java @@ -1,7 +1,6 @@ package ru.milandr.courses.farm.frolov.animals; import ru.milandr.courses.farm.Good; -import ru.milandr.courses.farm.frolov.FarmerAbobus; import ru.milandr.courses.farm.frolov.goods.Meat; public class Pig extends SuperAnimal { diff --git a/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java b/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java index 1706a6d..4398af1 100644 --- a/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java +++ b/src/ru/milandr/courses/farm/frolov/animals/SuperAnimal.java @@ -1,7 +1,6 @@ package ru.milandr.courses.farm.frolov.animals; import ru.milandr.courses.farm.Animal; -import ru.milandr.courses.farm.Good; public abstract class SuperAnimal implements Animal { protected String name; @@ -10,11 +9,6 @@ public SuperAnimal(String name) { this.name = name; } - //стоит ли указывать наследуемый абстрактный метод, если здесь он не переписывается, или лучше сразу переписать в дочернем классе - public abstract void produceSound(); - - public abstract Good produceGoods(); - public String getName() { return name; } diff --git a/src/ru/milandr/courses/farm/frolov/goods/Cheese.java b/src/ru/milandr/courses/farm/frolov/goods/Cheese.java index 4368089..44ef667 100644 --- a/src/ru/milandr/courses/farm/frolov/goods/Cheese.java +++ b/src/ru/milandr/courses/farm/frolov/goods/Cheese.java @@ -4,6 +4,7 @@ public class Cheese extends SuperGood { private static final long CHEESE_EXTENDED_TIME_MS = 10000; + public static final String CHEESE_NAME = "сыр"; public Cheese() { extendedTime = CHEESE_EXTENDED_TIME_MS; @@ -16,6 +17,6 @@ public void getCollected(FarmerAbobus farmer) { @Override public String toString() { - return "сыр"; + return CHEESE_NAME; } } \ No newline at end of file diff --git a/src/ru/milandr/courses/farm/frolov/goods/Meat.java b/src/ru/milandr/courses/farm/frolov/goods/Meat.java index a452c7d..f9ef591 100644 --- a/src/ru/milandr/courses/farm/frolov/goods/Meat.java +++ b/src/ru/milandr/courses/farm/frolov/goods/Meat.java @@ -4,6 +4,7 @@ public class Meat extends SuperGood { private static final long MEAT_EXTENDED_TIME_MS = 7500; + public static final String MEAT_NAME = "мясо"; public Meat() { extendedTime = MEAT_EXTENDED_TIME_MS; @@ -16,6 +17,6 @@ public void getCollected(FarmerAbobus farmer) { @Override public String toString() { - return "мясо"; + return MEAT_NAME; } } \ No newline at end of file diff --git a/src/ru/milandr/courses/farm/frolov/goods/Milk.java b/src/ru/milandr/courses/farm/frolov/goods/Milk.java index a89ad30..6efa94c 100644 --- a/src/ru/milandr/courses/farm/frolov/goods/Milk.java +++ b/src/ru/milandr/courses/farm/frolov/goods/Milk.java @@ -4,6 +4,7 @@ public class Milk extends SuperGood { private static final long MILK_EXTENDED_TIME_MS = 5000; + public static final String MILK_NAME = "молоко"; public Milk() { extendedTime = MILK_EXTENDED_TIME_MS; @@ -16,6 +17,6 @@ public void getCollected(FarmerAbobus farmer) { @Override public String toString() { - return "молоко"; + return MILK_NAME; } } From 5d1686a362619e84446236554e92377acf0f741a Mon Sep 17 00:00:00 2001 From: Frolov Georgy Date: Wed, 3 Nov 2021 13:03:53 +0300 Subject: [PATCH 5/6] Created custom exception, added new interface with getters --- .../NewComplexNumberInterface.java | 47 ++++++++++++++ .../courses/complexnumber/frolov/Abobus.java | 51 ++++++++++++++++ .../complexnumber/frolov/ComplexNumber.java | 61 ++++++++++++------- .../frolov/ComplexNumberException.java | 9 +++ 4 files changed, 146 insertions(+), 22 deletions(-) create mode 100644 src/ru/milandr/courses/complexnumber/NewComplexNumberInterface.java create mode 100644 src/ru/milandr/courses/complexnumber/frolov/Abobus.java create mode 100644 src/ru/milandr/courses/complexnumber/frolov/ComplexNumberException.java diff --git a/src/ru/milandr/courses/complexnumber/NewComplexNumberInterface.java b/src/ru/milandr/courses/complexnumber/NewComplexNumberInterface.java new file mode 100644 index 0000000..8f9d831 --- /dev/null +++ b/src/ru/milandr/courses/complexnumber/NewComplexNumberInterface.java @@ -0,0 +1,47 @@ +package ru.milandr.courses.complexnumber; + +public interface NewComplexNumberInterface { + + /** + * @param anotherNumber a number to add to current number + * @return complex number representing operation result + */ + NewComplexNumberInterface add(NewComplexNumberInterface anotherNumber); + + /** + * @param anotherNumber a number to subtract from current number + * @return complex number representing operation result (this minus another) + */ + NewComplexNumberInterface subtract(NewComplexNumberInterface anotherNumber); + + /** + * @param anotherNumber a number of times to take current number + * @return complex number representing operation result + */ + NewComplexNumberInterface multiply(NewComplexNumberInterface anotherNumber); + + /** + * @param anotherNumber a number to divide by + * @return complex number representing operation result (this divided by another) + */ + NewComplexNumberInterface divide(NewComplexNumberInterface anotherNumber); + + /** + * @return result of current complex number negating + */ + NewComplexNumberInterface negate(); + + /** + * @return modulus value for current complex number + */ + double calculateModulus(); + + /** + * @return argument value for current complex number + */ + double calculateArgument(); + + double getReal(); + + double getImagine(); +} \ No newline at end of file diff --git a/src/ru/milandr/courses/complexnumber/frolov/Abobus.java b/src/ru/milandr/courses/complexnumber/frolov/Abobus.java new file mode 100644 index 0000000..e48980a --- /dev/null +++ b/src/ru/milandr/courses/complexnumber/frolov/Abobus.java @@ -0,0 +1,51 @@ +package ru.milandr.courses.complexnumber.frolov; + +import ru.milandr.courses.complexnumber.NewComplexNumberInterface; + +public class Abobus implements NewComplexNumberInterface { + + @Override + public NewComplexNumberInterface add(NewComplexNumberInterface anotherNumber) { + return null; + } + + @Override + public NewComplexNumberInterface subtract(NewComplexNumberInterface anotherNumber) { + return null; + } + + @Override + public NewComplexNumberInterface multiply(NewComplexNumberInterface anotherNumber) { + return null; + } + + @Override + public NewComplexNumberInterface divide(NewComplexNumberInterface anotherNumber) { + return null; + } + + @Override + public NewComplexNumberInterface negate() { + return null; + } + + @Override + public double calculateModulus() { + return 0; + } + + @Override + public double calculateArgument() { + return 0; + } + + @Override + public double getReal() { + return 0; + } + + @Override + public double getImagine() { + return 0; + } +} diff --git a/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java index 4a4a92c..fad1af3 100644 --- a/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java +++ b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java @@ -1,8 +1,8 @@ package ru.milandr.courses.complexnumber.frolov; -import ru.milandr.courses.complexnumber.ComplexNumberInterface; +import ru.milandr.courses.complexnumber.NewComplexNumberInterface; -public class ComplexNumber implements ComplexNumberInterface { +public class ComplexNumber implements NewComplexNumberInterface { private final double real; private final double imagine; @@ -12,29 +12,30 @@ public ComplexNumber(double a, double b) { this.imagine = b; } + @Override - public ComplexNumberInterface add(ComplexNumberInterface anotherNumber) { - ComplexNumber myNumber = checkInstance(anotherNumber); + public NewComplexNumberInterface add(NewComplexNumberInterface anotherNumber) { + ComplexNumber myNumber = checkException(anotherNumber); return new ComplexNumber((real + myNumber.real), (imagine + myNumber.imagine)); } @Override - public ComplexNumberInterface subtract(ComplexNumberInterface anotherNumber) { - ComplexNumber myNumber = checkInstance(anotherNumber); + public NewComplexNumberInterface subtract(NewComplexNumberInterface anotherNumber) { + ComplexNumber myNumber = checkException(anotherNumber); return new ComplexNumber((real - myNumber.real), (imagine - myNumber.imagine)); } @Override - public ComplexNumberInterface multiply(ComplexNumberInterface anotherNumber) { - ComplexNumber myNumber = checkInstance(anotherNumber); + public NewComplexNumberInterface multiply(NewComplexNumberInterface anotherNumber) { + ComplexNumber myNumber = checkException(anotherNumber); double newReal = (real * myNumber.real - imagine * myNumber.imagine); double newImagine = real * myNumber.imagine + imagine * myNumber.real; return new ComplexNumber(newReal, newImagine); } @Override - public ComplexNumberInterface divide(ComplexNumberInterface anotherNumber) { - ComplexNumber myNumber = checkInstance(anotherNumber); + public NewComplexNumberInterface divide(NewComplexNumberInterface anotherNumber) { + ComplexNumber myNumber = checkException(anotherNumber); double v = Math.pow(myNumber.real, 2) + Math.pow(myNumber.imagine, 2); double newReal = (real * myNumber.real + imagine * myNumber.real) / v; double newImagine = (myNumber.real * imagine - real * (myNumber.imagine)) / v; @@ -42,7 +43,7 @@ public ComplexNumberInterface divide(ComplexNumberInterface anotherNumber) { } @Override - public ComplexNumberInterface negate() { + public ComplexNumber negate() { double newReal = real * -1; double newImagine = imagine * -1; return new ComplexNumber(newReal, newImagine); @@ -74,8 +75,21 @@ public double calculateArgument() { return real >= 0 ? Math.atan(imagine / real) : Math.atan(imagine / real + Math.toRadians(90)); } - private ComplexNumber checkInstance(ComplexNumberInterface someInstance) { - return (ComplexNumber) someInstance; + @Override + public double getReal() { + return real; + } + + @Override + public double getImagine() { + return imagine; + } + + private ComplexNumber checkException(NewComplexNumberInterface someInstance) { + if (!(someInstance instanceof ComplexNumber)) { + throw new ComplexNumberException("Неправильный формат числа"); + } + return new ComplexNumber(getReal(), getImagine()); } @Override @@ -85,30 +99,33 @@ public String toString() { } public static void main(String[] args) { - ComplexNumberInterface f1 = new ComplexNumber(5, 14); + NewComplexNumberInterface f1 = new ComplexNumber(5, 14); System.out.println(f1); - ComplexNumberInterface f2 = new ComplexNumber(10, -6); + NewComplexNumberInterface f2 = new ComplexNumber(10, -6); System.out.println(f2); - ComplexNumberInterface sum = f1.add(f2); + NewComplexNumberInterface sum = f1.add(f2); System.out.println("сумма: " + sum); - ComplexNumberInterface diff = f1.subtract(f2); + NewComplexNumberInterface diff = f1.subtract(f2); System.out.println("разность: " + diff); - ComplexNumberInterface multi = f1.multiply(f2); + NewComplexNumberInterface multi = f1.multiply(f2); System.out.println("умножение: " + multi); - ComplexNumberInterface div = f1.divide(f2); + NewComplexNumberInterface div = f1.divide(f2); System.out.println("деление: " + div); - ComplexNumberInterface negative = f1.negate(); + NewComplexNumberInterface negative = f1.negate(); System.out.println("негатив: " + negative); double mod = f1.calculateModulus(); System.out.println("модуль: " + mod); double arg = f1.calculateArgument(); System.out.println("аргумент: " + arg); - ComplexNumberInterface f3 = new ComplexNumber(0, -6); + NewComplexNumberInterface f3 = new ComplexNumber(0, -6); double arg3 = f3.calculateArgument(); System.out.println("аргумент чисто мнимого числа: " + arg3); - ComplexNumberInterface f4 = new ComplexNumber(10, 0); + NewComplexNumberInterface f4 = new ComplexNumber(10, 0); double arg4 = f4.calculateArgument(); System.out.println("аргумент действительного числа: " + arg4); + + //Попытка передать невалидный аргумент + f1.add(new Abobus()); } } diff --git a/src/ru/milandr/courses/complexnumber/frolov/ComplexNumberException.java b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumberException.java new file mode 100644 index 0000000..67e0db1 --- /dev/null +++ b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumberException.java @@ -0,0 +1,9 @@ +package ru.milandr.courses.complexnumber.frolov; + +public class ComplexNumberException extends RuntimeException { + + public ComplexNumberException(String message) { + super(message); + } + +} From 41a48e703dd9549dcb8d7e4906231839ca17dbdd Mon Sep 17 00:00:00 2001 From: Frolov Georgy Date: Wed, 3 Nov 2021 13:03:53 +0300 Subject: [PATCH 6/6] Created custom exception, added new interface with getters --- .../NewComplexNumberInterface.java | 47 ++++++++++++++ .../courses/complexnumber/frolov/Abobus.java | 51 ++++++++++++++++ .../complexnumber/frolov/ComplexNumber.java | 61 ++++++++++++------- .../frolov/ComplexNumberException.java | 9 +++ .../milandr/courses/complexnumber/frolov/Text | 2 + 5 files changed, 148 insertions(+), 22 deletions(-) create mode 100644 src/ru/milandr/courses/complexnumber/NewComplexNumberInterface.java create mode 100644 src/ru/milandr/courses/complexnumber/frolov/Abobus.java create mode 100644 src/ru/milandr/courses/complexnumber/frolov/ComplexNumberException.java create mode 100644 src/ru/milandr/courses/complexnumber/frolov/Text diff --git a/src/ru/milandr/courses/complexnumber/NewComplexNumberInterface.java b/src/ru/milandr/courses/complexnumber/NewComplexNumberInterface.java new file mode 100644 index 0000000..8f9d831 --- /dev/null +++ b/src/ru/milandr/courses/complexnumber/NewComplexNumberInterface.java @@ -0,0 +1,47 @@ +package ru.milandr.courses.complexnumber; + +public interface NewComplexNumberInterface { + + /** + * @param anotherNumber a number to add to current number + * @return complex number representing operation result + */ + NewComplexNumberInterface add(NewComplexNumberInterface anotherNumber); + + /** + * @param anotherNumber a number to subtract from current number + * @return complex number representing operation result (this minus another) + */ + NewComplexNumberInterface subtract(NewComplexNumberInterface anotherNumber); + + /** + * @param anotherNumber a number of times to take current number + * @return complex number representing operation result + */ + NewComplexNumberInterface multiply(NewComplexNumberInterface anotherNumber); + + /** + * @param anotherNumber a number to divide by + * @return complex number representing operation result (this divided by another) + */ + NewComplexNumberInterface divide(NewComplexNumberInterface anotherNumber); + + /** + * @return result of current complex number negating + */ + NewComplexNumberInterface negate(); + + /** + * @return modulus value for current complex number + */ + double calculateModulus(); + + /** + * @return argument value for current complex number + */ + double calculateArgument(); + + double getReal(); + + double getImagine(); +} \ No newline at end of file diff --git a/src/ru/milandr/courses/complexnumber/frolov/Abobus.java b/src/ru/milandr/courses/complexnumber/frolov/Abobus.java new file mode 100644 index 0000000..e48980a --- /dev/null +++ b/src/ru/milandr/courses/complexnumber/frolov/Abobus.java @@ -0,0 +1,51 @@ +package ru.milandr.courses.complexnumber.frolov; + +import ru.milandr.courses.complexnumber.NewComplexNumberInterface; + +public class Abobus implements NewComplexNumberInterface { + + @Override + public NewComplexNumberInterface add(NewComplexNumberInterface anotherNumber) { + return null; + } + + @Override + public NewComplexNumberInterface subtract(NewComplexNumberInterface anotherNumber) { + return null; + } + + @Override + public NewComplexNumberInterface multiply(NewComplexNumberInterface anotherNumber) { + return null; + } + + @Override + public NewComplexNumberInterface divide(NewComplexNumberInterface anotherNumber) { + return null; + } + + @Override + public NewComplexNumberInterface negate() { + return null; + } + + @Override + public double calculateModulus() { + return 0; + } + + @Override + public double calculateArgument() { + return 0; + } + + @Override + public double getReal() { + return 0; + } + + @Override + public double getImagine() { + return 0; + } +} diff --git a/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java index 4a4a92c..fad1af3 100644 --- a/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java +++ b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumber.java @@ -1,8 +1,8 @@ package ru.milandr.courses.complexnumber.frolov; -import ru.milandr.courses.complexnumber.ComplexNumberInterface; +import ru.milandr.courses.complexnumber.NewComplexNumberInterface; -public class ComplexNumber implements ComplexNumberInterface { +public class ComplexNumber implements NewComplexNumberInterface { private final double real; private final double imagine; @@ -12,29 +12,30 @@ public ComplexNumber(double a, double b) { this.imagine = b; } + @Override - public ComplexNumberInterface add(ComplexNumberInterface anotherNumber) { - ComplexNumber myNumber = checkInstance(anotherNumber); + public NewComplexNumberInterface add(NewComplexNumberInterface anotherNumber) { + ComplexNumber myNumber = checkException(anotherNumber); return new ComplexNumber((real + myNumber.real), (imagine + myNumber.imagine)); } @Override - public ComplexNumberInterface subtract(ComplexNumberInterface anotherNumber) { - ComplexNumber myNumber = checkInstance(anotherNumber); + public NewComplexNumberInterface subtract(NewComplexNumberInterface anotherNumber) { + ComplexNumber myNumber = checkException(anotherNumber); return new ComplexNumber((real - myNumber.real), (imagine - myNumber.imagine)); } @Override - public ComplexNumberInterface multiply(ComplexNumberInterface anotherNumber) { - ComplexNumber myNumber = checkInstance(anotherNumber); + public NewComplexNumberInterface multiply(NewComplexNumberInterface anotherNumber) { + ComplexNumber myNumber = checkException(anotherNumber); double newReal = (real * myNumber.real - imagine * myNumber.imagine); double newImagine = real * myNumber.imagine + imagine * myNumber.real; return new ComplexNumber(newReal, newImagine); } @Override - public ComplexNumberInterface divide(ComplexNumberInterface anotherNumber) { - ComplexNumber myNumber = checkInstance(anotherNumber); + public NewComplexNumberInterface divide(NewComplexNumberInterface anotherNumber) { + ComplexNumber myNumber = checkException(anotherNumber); double v = Math.pow(myNumber.real, 2) + Math.pow(myNumber.imagine, 2); double newReal = (real * myNumber.real + imagine * myNumber.real) / v; double newImagine = (myNumber.real * imagine - real * (myNumber.imagine)) / v; @@ -42,7 +43,7 @@ public ComplexNumberInterface divide(ComplexNumberInterface anotherNumber) { } @Override - public ComplexNumberInterface negate() { + public ComplexNumber negate() { double newReal = real * -1; double newImagine = imagine * -1; return new ComplexNumber(newReal, newImagine); @@ -74,8 +75,21 @@ public double calculateArgument() { return real >= 0 ? Math.atan(imagine / real) : Math.atan(imagine / real + Math.toRadians(90)); } - private ComplexNumber checkInstance(ComplexNumberInterface someInstance) { - return (ComplexNumber) someInstance; + @Override + public double getReal() { + return real; + } + + @Override + public double getImagine() { + return imagine; + } + + private ComplexNumber checkException(NewComplexNumberInterface someInstance) { + if (!(someInstance instanceof ComplexNumber)) { + throw new ComplexNumberException("Неправильный формат числа"); + } + return new ComplexNumber(getReal(), getImagine()); } @Override @@ -85,30 +99,33 @@ public String toString() { } public static void main(String[] args) { - ComplexNumberInterface f1 = new ComplexNumber(5, 14); + NewComplexNumberInterface f1 = new ComplexNumber(5, 14); System.out.println(f1); - ComplexNumberInterface f2 = new ComplexNumber(10, -6); + NewComplexNumberInterface f2 = new ComplexNumber(10, -6); System.out.println(f2); - ComplexNumberInterface sum = f1.add(f2); + NewComplexNumberInterface sum = f1.add(f2); System.out.println("сумма: " + sum); - ComplexNumberInterface diff = f1.subtract(f2); + NewComplexNumberInterface diff = f1.subtract(f2); System.out.println("разность: " + diff); - ComplexNumberInterface multi = f1.multiply(f2); + NewComplexNumberInterface multi = f1.multiply(f2); System.out.println("умножение: " + multi); - ComplexNumberInterface div = f1.divide(f2); + NewComplexNumberInterface div = f1.divide(f2); System.out.println("деление: " + div); - ComplexNumberInterface negative = f1.negate(); + NewComplexNumberInterface negative = f1.negate(); System.out.println("негатив: " + negative); double mod = f1.calculateModulus(); System.out.println("модуль: " + mod); double arg = f1.calculateArgument(); System.out.println("аргумент: " + arg); - ComplexNumberInterface f3 = new ComplexNumber(0, -6); + NewComplexNumberInterface f3 = new ComplexNumber(0, -6); double arg3 = f3.calculateArgument(); System.out.println("аргумент чисто мнимого числа: " + arg3); - ComplexNumberInterface f4 = new ComplexNumber(10, 0); + NewComplexNumberInterface f4 = new ComplexNumber(10, 0); double arg4 = f4.calculateArgument(); System.out.println("аргумент действительного числа: " + arg4); + + //Попытка передать невалидный аргумент + f1.add(new Abobus()); } } diff --git a/src/ru/milandr/courses/complexnumber/frolov/ComplexNumberException.java b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumberException.java new file mode 100644 index 0000000..67e0db1 --- /dev/null +++ b/src/ru/milandr/courses/complexnumber/frolov/ComplexNumberException.java @@ -0,0 +1,9 @@ +package ru.milandr.courses.complexnumber.frolov; + +public class ComplexNumberException extends RuntimeException { + + public ComplexNumberException(String message) { + super(message); + } + +} diff --git a/src/ru/milandr/courses/complexnumber/frolov/Text b/src/ru/milandr/courses/complexnumber/frolov/Text new file mode 100644 index 0000000..4fac831 --- /dev/null +++ b/src/ru/milandr/courses/complexnumber/frolov/Text @@ -0,0 +1,2 @@ +1) Переопределяемый метод не может выбрасывать проверяемые исключения, которые выше по иерархии чем исключения в методе родительского класса. +2) Конструктор дочернего класса должен включить в свой блок throws все классы исключений или их предков из блока throws конструктора родительского класса, к которому он обращается при создании объекта. \ No newline at end of file