diff --git a/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/Main.java b/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/Main.java index 94f5a30f7..c4701a264 100644 --- a/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/Main.java +++ b/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/Main.java @@ -1,5 +1,12 @@ package com.walking.lesson16_abstract_class_interface.task1_abstract_class; + +import com.walking.lesson16_abstract_class_interface.task1_abstract_class.model.Figure; +import com.walking.lesson16_abstract_class_interface.task1_abstract_class.model.Square; +import com.walking.lesson16_abstract_class_interface.task1_abstract_class.model.Triangle; + +import java.util.Scanner; + /** * Реализуйте задачу * ... @@ -7,5 +14,39 @@ */ public class Main { public static void main(String[] args) { + byte selectedFigure, selectedLength; + + Scanner io = new Scanner(System.in); + + System.out.println("What figure do you want? [1 - triangle, 2 - square]"); + selectedFigure = io.nextByte(); + System.out.println("Enter side's length [min - 3, max - 20]"); + selectedLength = io.nextByte(); + io.close(); + +// Checking user's validity + if (selectedFigure <1 || selectedFigure > 2 || selectedLength < 3 || selectedLength > 20){ + System.out.println("Invalid entry"); + return; + } + System.out.println("Entry is VALID. Drawing your figure...\n"); + + Figure figure; + + if (selectedFigure == 1){ + figure = new Triangle(selectedLength); + } + else { + figure = new Square(selectedLength); + } + + System.out.println(figure.builtFigure()); + + + + + + + } } diff --git a/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/Figure.java b/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/Figure.java new file mode 100644 index 000000000..0e9cf63b5 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/Figure.java @@ -0,0 +1,17 @@ +package com.walking.lesson16_abstract_class_interface.task1_abstract_class.model; + +public abstract class Figure { + protected static final String VERTICAL_SYMBOL = "|"; + protected static final String HORIZONTAL_SYMBOL = "-"; + protected static final String FILLING_SYMBOL = " "; + protected static final String TRIANGLE_LEFT_SYMBOL = "/"; + protected static final String TRIANGLE_RIGHT_SYMBOL = "\\"; + + protected int width; + + Figure(int width){ + this.width = width; + } + + public abstract String builtFigure(); +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/Square.java b/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/Square.java new file mode 100644 index 000000000..1e510014d --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/Square.java @@ -0,0 +1,29 @@ +package com.walking.lesson16_abstract_class_interface.task1_abstract_class.model; + +public class Square extends Figure{ + public Square(int width){ + super(width); + } + + @Override + public String builtFigure() { + StringBuilder wholeFigure = new StringBuilder(); + String symbol; + for (byte y = 0; y < width; y++) { + if (y == 0 || y == width-1) symbol = HORIZONTAL_SYMBOL; + else symbol = FILLING_SYMBOL; + + for (int x = 0; x < width; x++) { + if (x == 0 || x == width-1) { + wholeFigure.append(VERTICAL_SYMBOL); + } else { + wholeFigure.append(symbol); + } + } + wholeFigure.append("\n"); + } + return wholeFigure.toString(); + } + + +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/Triangle.java b/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/Triangle.java new file mode 100644 index 000000000..530a3e4f7 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/Triangle.java @@ -0,0 +1,54 @@ +package com.walking.lesson16_abstract_class_interface.task1_abstract_class.model; + +public class Triangle extends Figure{ + + public Triangle(int width){ + super(width); + } + + @Override + public String builtFigure() { + StringBuilder stringToDraw = new StringBuilder(); + StringBuilder sideSpaces = new StringBuilder(); //пробелы снаружи треугольника + StringBuilder innerSpaces = new StringBuilder(); //пробелы внутри треугольника + byte spaceCount = (byte) ((width-2) / 2); //Узнаем сколько нам нужно пробелов сбоку + byte innerSpaceCount = 0; //в первой строке треугольника нет внутренних пробелов + + +//отрисовываем треугольник по строкам сверху вниз + for (byte y = spaceCount; y >= 0; y--) { + for (byte x = 0; x <= y; x++) { + sideSpaces.append(FILLING_SYMBOL); + } + +//символы боковых сторон треугольника и пробелы (или черту в самой нижней строке) между ними + for (byte x = 0; x < innerSpaceCount; x++) { + if (y != 0) innerSpaces.append(FILLING_SYMBOL); //если не последняя строка, то наполняем пробелами + else innerSpaces.append(HORIZONTAL_SYMBOL); //если последняя - то это основание треугольника + } + +/* строка треугольника состоит из: + * пробелы слева + левая грань + пробелы между гранями + правая грань + пробелы справа + * /\ + * / \ + * /----\ + * + */ + stringToDraw.append + (sideSpaces).append + (TRIANGLE_LEFT_SYMBOL).append + (innerSpaces).append + (TRIANGLE_RIGHT_SYMBOL).append + (sideSpaces).append("\n"); + + sideSpaces = new StringBuilder(); //обнуляем переменные перед следующей итерацией цикла + innerSpaces = new StringBuilder(); + + innerSpaceCount += 2; //в следующей строке внутри треугольника будет на 2 пробела больше + } + + return stringToDraw.toString(); + } + + +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task1_interface/Main.java b/src/com/walking/lesson16_abstract_class_interface/task1_interface/Main.java index 75935142a..40c3c5c30 100644 --- a/src/com/walking/lesson16_abstract_class_interface/task1_interface/Main.java +++ b/src/com/walking/lesson16_abstract_class_interface/task1_interface/Main.java @@ -1,6 +1,12 @@ package com.walking.lesson16_abstract_class_interface.task1_interface; +import com.walking.lesson16_abstract_class_interface.task1_interface.model.Figure; +import com.walking.lesson16_abstract_class_interface.task1_interface.model.Square; +import com.walking.lesson16_abstract_class_interface.task1_interface.model.Triangle; + +import java.util.Scanner; + /** * Реализуйте задачу * ... @@ -8,5 +14,32 @@ */ public class Main { public static void main(String[] args) { + int selectedFigure, selectedLength; + + Scanner scanner = new Scanner(System.in); + + System.out.println("What figure do you want? [1 - triangle, 2 - square]"); + selectedFigure = scanner.nextInt(); + System.out.println("Enter side's length [min - 3, max - 20]"); + selectedLength = scanner.nextInt(); + scanner.close(); + +// Checking user's validity + if (selectedFigure <1 || selectedFigure > 2 || selectedLength < 3 || selectedLength > 20){ + System.out.println("Invalid entry"); + return; + } + System.out.println("Entry is VALID. Drawing your figure...\n"); + + Figure figure; + + if (selectedFigure == 1) { + figure = new Triangle(); + } + else { + figure = new Square(); + } + System.out.println(figure.drawFigure(selectedLength)); + } } diff --git a/src/com/walking/lesson16_abstract_class_interface/task1_interface/model/Figure.java b/src/com/walking/lesson16_abstract_class_interface/task1_interface/model/Figure.java new file mode 100644 index 000000000..d78b7e296 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task1_interface/model/Figure.java @@ -0,0 +1,11 @@ +package com.walking.lesson16_abstract_class_interface.task1_interface.model; + +public interface Figure { + String VERTICAL_SYMBOL = "|"; + String HORIZONTAL_SYMBOL = "-"; + String FILLING_SYMBOL = " "; + String TRIANGLE_LEFT_SYMBOL = "/"; + String TRIANGLE_RIGHT_SYMBOL = "\\"; + + String drawFigure(int width); +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task1_interface/model/Square.java b/src/com/walking/lesson16_abstract_class_interface/task1_interface/model/Square.java new file mode 100644 index 000000000..dffdecdb5 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task1_interface/model/Square.java @@ -0,0 +1,25 @@ +package com.walking.lesson16_abstract_class_interface.task1_interface.model; + +public class Square implements Figure{ + + @Override + public String drawFigure(int width) { + + StringBuilder wholeFigure = new StringBuilder(); + String symbolToFill; + for (byte y = 0; y < width; y++) { + if (y == 0 || y == width-1) symbolToFill = HORIZONTAL_SYMBOL; + else symbolToFill = FILLING_SYMBOL; + + for (int x = 0; x < width; x++) { + if (x == 0 || x == width-1) { + wholeFigure.append(VERTICAL_SYMBOL); + } else { + wholeFigure.append(symbolToFill); + } + } + wholeFigure.append("\n"); + } + return wholeFigure.toString(); + } +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task1_interface/model/Triangle.java b/src/com/walking/lesson16_abstract_class_interface/task1_interface/model/Triangle.java new file mode 100644 index 000000000..45d676158 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task1_interface/model/Triangle.java @@ -0,0 +1,46 @@ +package com.walking.lesson16_abstract_class_interface.task1_interface.model; + +public class Triangle implements Figure{ + + @Override + public String drawFigure(int width) { + StringBuilder stringToDraw = new StringBuilder(); + StringBuilder sideSpaces = new StringBuilder(); //пробелы снаружи треугольника + StringBuilder innerSpaces = new StringBuilder(); //пробелы внутри треугольника + int spaceCount = (width-2) / 2; //Узнаем сколько нам нужно пробелов сбоку + int innerSpaceCount = 0; //в первой строке треугольника нет внутренних пробелов + + +//отрисовываем треугольник по строкам сверху вниз + for (int y = spaceCount; y >= 0; y--) { + sideSpaces.append(FILLING_SYMBOL.repeat(Math.max(0, y + 1))); + +//символы боковых сторон треугольника и пробелы (или черту в самой нижней строке) между ними + for (int x = 0; x < innerSpaceCount; x++) { + if (y != 0) innerSpaces.append(FILLING_SYMBOL); //если не последняя строка, то наполняем пробелами + else innerSpaces.append(HORIZONTAL_SYMBOL); //если последняя - то это основание треугольника + } + +/* строка треугольника состоит из: + * пробелы слева + левая грань + пробелы между гранями + правая грань + пробелы справа + * /\ + * / \ + * /----\ + * + */ + + stringToDraw.append + (sideSpaces).append + (TRIANGLE_LEFT_SYMBOL).append + (innerSpaces).append + (TRIANGLE_RIGHT_SYMBOL).append + (sideSpaces).append("\n"); + + sideSpaces = new StringBuilder(); + innerSpaces = new StringBuilder(); + innerSpaceCount += 2; //в следующей строке внутри треугольника будет на 2 пробела больше + } + + return stringToDraw.toString(); + } +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task2/Main.java b/src/com/walking/lesson16_abstract_class_interface/task2/Main.java index e79f80e2e..429d399ce 100644 --- a/src/com/walking/lesson16_abstract_class_interface/task2/Main.java +++ b/src/com/walking/lesson16_abstract_class_interface/task2/Main.java @@ -1,11 +1,35 @@ package com.walking.lesson16_abstract_class_interface.task2; +import com.walking.lesson16_abstract_class_interface.task2.model.*; + +import java.util.Scanner; + /** * Реализуйте задачу * ... * с использованием интерфейсов. Каждая реализация должна возвращать свое сообщение. */ public class Main { + + static final String REQUEST_HI = "Hi"; + static final String REQUEST_BYE = "Bye"; + static final String REQUEST_HOW_ARE_YOU = "How are you"; public static void main(String[] args) { + System.out.println("Enter your greeting"); + + Scanner scanner = new Scanner(System.in); + String userEntry = scanner.nextLine(); + scanner.close(); + + Greeting reply; + + switch (userEntry){ + case REQUEST_HI -> reply = new Hi(); + case REQUEST_BYE -> reply = new Bye(); + case REQUEST_HOW_ARE_YOU -> reply = new HowAreYou(); + default -> reply = new UnknownGreeting(); + } + System.out.println(reply.printReply()); + } } diff --git a/src/com/walking/lesson16_abstract_class_interface/task2/model/Bye.java b/src/com/walking/lesson16_abstract_class_interface/task2/model/Bye.java new file mode 100644 index 000000000..4257ee0a9 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task2/model/Bye.java @@ -0,0 +1,9 @@ +package com.walking.lesson16_abstract_class_interface.task2.model; + +public class Bye implements Greeting{ + + @Override + public String printReply() { + return REPLY_BYE; + } +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task2/model/Greeting.java b/src/com/walking/lesson16_abstract_class_interface/task2/model/Greeting.java new file mode 100644 index 000000000..f1a376901 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task2/model/Greeting.java @@ -0,0 +1,10 @@ +package com.walking.lesson16_abstract_class_interface.task2.model; + +public interface Greeting { + String REPLY_HI = "Hello"; + String REPLY_BYE = "Good bye"; + String REPLY_HOW_ARE_YOU = "How are you doing"; + String REPLY_UNKNOWN = "Unknown message"; + + String printReply(); +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task2/model/Hi.java b/src/com/walking/lesson16_abstract_class_interface/task2/model/Hi.java new file mode 100644 index 000000000..2308800a1 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task2/model/Hi.java @@ -0,0 +1,9 @@ +package com.walking.lesson16_abstract_class_interface.task2.model; + +public class Hi implements Greeting{ + + @Override + public String printReply() { + return REPLY_HI; + } +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task2/model/HowAreYou.java b/src/com/walking/lesson16_abstract_class_interface/task2/model/HowAreYou.java new file mode 100644 index 000000000..73b111da4 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task2/model/HowAreYou.java @@ -0,0 +1,8 @@ +package com.walking.lesson16_abstract_class_interface.task2.model; + +public class HowAreYou implements Greeting{ + @Override + public String printReply() { + return REPLY_HOW_ARE_YOU; + } +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task2/model/UnknownGreeting.java b/src/com/walking/lesson16_abstract_class_interface/task2/model/UnknownGreeting.java new file mode 100644 index 000000000..68cb487e8 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task2/model/UnknownGreeting.java @@ -0,0 +1,9 @@ +package com.walking.lesson16_abstract_class_interface.task2.model; + +public class UnknownGreeting implements Greeting{ + + @Override + public String printReply(){ + return REPLY_UNKNOWN; + } +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task3/Main.java b/src/com/walking/lesson16_abstract_class_interface/task3/Main.java index f66ab8489..cb72ce356 100644 --- a/src/com/walking/lesson16_abstract_class_interface/task3/Main.java +++ b/src/com/walking/lesson16_abstract_class_interface/task3/Main.java @@ -1,6 +1,11 @@ package com.walking.lesson16_abstract_class_interface.task3; +import com.walking.lesson16_abstract_class_interface.task3.model.Animal; +import com.walking.lesson16_abstract_class_interface.task3.model.inherit.Cat; +import com.walking.lesson16_abstract_class_interface.task3.model.inherit.Cow; +import com.walking.lesson16_abstract_class_interface.task3.model.inherit.Dog; + /** * Реализуйте любую задачу из уроков о наследовании или полиморфизме с использованием новых знаний. * Выбирайте инструмент с умом. @@ -10,5 +15,11 @@ */ public class Main { public static void main(String[] args) { + Animal[] zoo = new Animal[]{new Cat(), new Dog(), new Cow()}; + + for (Animal animal : zoo) { + System.out.println(animal.Sound()); + } + } } diff --git a/src/com/walking/lesson16_abstract_class_interface/task3/model/Animal.java b/src/com/walking/lesson16_abstract_class_interface/task3/model/Animal.java new file mode 100644 index 000000000..b3b0e4719 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task3/model/Animal.java @@ -0,0 +1,5 @@ +package com.walking.lesson16_abstract_class_interface.task3.model; + +public abstract class Animal { + public abstract String Sound(); +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task3/model/inherit/Cat.java b/src/com/walking/lesson16_abstract_class_interface/task3/model/inherit/Cat.java new file mode 100644 index 000000000..d17767da4 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task3/model/inherit/Cat.java @@ -0,0 +1,10 @@ +package com.walking.lesson16_abstract_class_interface.task3.model.inherit; + +import com.walking.lesson16_abstract_class_interface.task3.model.Animal; + +public class Cat extends Animal { + + public String Sound(){ + return "Meow"; + } +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task3/model/inherit/Cow.java b/src/com/walking/lesson16_abstract_class_interface/task3/model/inherit/Cow.java new file mode 100644 index 000000000..3342979a0 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task3/model/inherit/Cow.java @@ -0,0 +1,9 @@ +package com.walking.lesson16_abstract_class_interface.task3.model.inherit; + +import com.walking.lesson16_abstract_class_interface.task3.model.Animal; + +public class Cow extends Animal { + public String Sound(){ + return "Moo"; + } +} diff --git a/src/com/walking/lesson16_abstract_class_interface/task3/model/inherit/Dog.java b/src/com/walking/lesson16_abstract_class_interface/task3/model/inherit/Dog.java new file mode 100644 index 000000000..000fbe542 --- /dev/null +++ b/src/com/walking/lesson16_abstract_class_interface/task3/model/inherit/Dog.java @@ -0,0 +1,9 @@ +package com.walking.lesson16_abstract_class_interface.task3.model.inherit; + +import com.walking.lesson16_abstract_class_interface.task3.model.Animal; + +public class Dog extends Animal { + public String Sound(){ + return "Woof"; + } +} diff --git a/src/com/walking/lesson17_enum/task1/Main.java b/src/com/walking/lesson17_enum/task1/Main.java index 7fc684202..4c30255fe 100644 --- a/src/com/walking/lesson17_enum/task1/Main.java +++ b/src/com/walking/lesson17_enum/task1/Main.java @@ -1,12 +1,33 @@ package com.walking.lesson17_enum.task1; +import com.walking.lesson17_enum.task1.enums.Greeting; + +import java.util.Scanner; + /** * Реализуйте задачу * ... * через enum. В т.ч. реализуйте в enum'е поиск значения по фразе, * введенной пользователем. Напоминаю, что enum'ы могут содержать поля. + + * Написать программу, которая принимает строку с клавиатуры. + * * Если строка == "Hi" - вывести в консоль "Hello", + * * если Bye - Good bye, + * * если How are you - How are your doing. + * * Если любая другая строка - вывести Unknown message. + * * Сделать через switch-case */ public class Main { public static void main(String[] args) { + + Scanner io = new Scanner(System.in); + System.out.println("Enter something. "); + String userInput = io.nextLine(); + io.close(); + + Greeting outPut = Greeting.findGreeting(userInput); + System.out.println(outPut.getReturnGreeting()); + } + } diff --git a/src/com/walking/lesson17_enum/task1/enums/Greeting.java b/src/com/walking/lesson17_enum/task1/enums/Greeting.java new file mode 100644 index 000000000..801b0517f --- /dev/null +++ b/src/com/walking/lesson17_enum/task1/enums/Greeting.java @@ -0,0 +1,32 @@ +package com.walking.lesson17_enum.task1.enums; + +public enum Greeting { + HI("Hi","Hello"), + BYE("Bye","Good bye"), + HOW_R_U("How are you","How are you doing"), + OTHER("","Unknown message"); + + private final String userInput; + private final String returnGreeting; + + Greeting(String userInput, String returnGreeting){ + this.userInput = userInput; + this.returnGreeting = returnGreeting; + } + + public String getReturnGreeting() { + return returnGreeting; + } + + public static Greeting findGreeting(String userEntry) { + + + for (Greeting allCase : Greeting.values()) { + if (allCase.userInput.equals(userEntry)) { + return allCase; + } + } + return OTHER; + } +} + diff --git a/src/com/walking/lesson17_enum/task2/Main.java b/src/com/walking/lesson17_enum/task2/Main.java index 293ca15c9..98d0cd510 100644 --- a/src/com/walking/lesson17_enum/task2/Main.java +++ b/src/com/walking/lesson17_enum/task2/Main.java @@ -1,5 +1,7 @@ package com.walking.lesson17_enum.task2; +import com.walking.lesson17_enum.task2.enums.Animal; + /** * Реализуйте задачу * ... @@ -7,5 +9,10 @@ */ public class Main { public static void main(String[] args) { + Animal[] all = {Animal.CAT, Animal.COW, Animal.DOG}; + + for (Animal animals: all){ + System.out.println(animals.sound()); + } } } diff --git a/src/com/walking/lesson17_enum/task2/enums/Animal.java b/src/com/walking/lesson17_enum/task2/enums/Animal.java new file mode 100644 index 000000000..c8e4c627c --- /dev/null +++ b/src/com/walking/lesson17_enum/task2/enums/Animal.java @@ -0,0 +1,16 @@ +package com.walking.lesson17_enum.task2.enums; + +public enum Animal { + DOG("Woof"), + CAT("Meow"), + COW("Moo"); + + final String ANIMAL_VOICE; + Animal(String voice){ + this.ANIMAL_VOICE = voice; + } + + public String sound(){ + return ANIMAL_VOICE; + } +} diff --git a/src/com/walking/lesson17_enum/task3/Main.java b/src/com/walking/lesson17_enum/task3/Main.java index fb541e003..8492125f8 100644 --- a/src/com/walking/lesson17_enum/task3/Main.java +++ b/src/com/walking/lesson17_enum/task3/Main.java @@ -1,5 +1,10 @@ package com.walking.lesson17_enum.task3; +import com.walking.lesson17_enum.task3.enums.EquiLateralShape; + +import java.util.Scanner; + + /** * Реализуйте задачу * ... @@ -7,5 +12,29 @@ */ public class Main { public static void main(String[] args) { + + int size; + int choice; + + Scanner scanner = new Scanner(System.in); + + System.out.println("Enter figure width"); + size = scanner.nextInt(); + System.out.println("Enter 1 for triangle, 2 for square"); + choice = scanner.nextInt(); + scanner.close(); + if (choice < 1 || choice > 2 || size < 1 || size > 20){ + System.out.println("Incorrect entry"); + return; + } + + EquiLateralShape figure = switch (choice) { + case 1 -> EquiLateralShape.TRIANGLE; + case 2 -> EquiLateralShape.SQUARE; + default -> EquiLateralShape.TRIANGLE; //если что, нарисуем треугольник + }; + + + System.out.println(figure.drawFigure(size)); } } diff --git a/src/com/walking/lesson17_enum/task3/enums/EquiLateralShape.java b/src/com/walking/lesson17_enum/task3/enums/EquiLateralShape.java new file mode 100644 index 000000000..4b9f3ed4e --- /dev/null +++ b/src/com/walking/lesson17_enum/task3/enums/EquiLateralShape.java @@ -0,0 +1,73 @@ +package com.walking.lesson17_enum.task3.enums; + +public enum EquiLateralShape { + TRIANGLE{ + @Override + public String drawFigure(int size){ + StringBuilder stringToDraw = new StringBuilder(); + StringBuilder sideSpaces = new StringBuilder(); //пробелы снаружи треугольника + StringBuilder innerSpaces = new StringBuilder(); //пробелы внутри треугольника + + int sideSpaceCount = (size - 2) / 2; // Узнаем сколько нам нужно пробелов сбоку + int innerSpaceCount = 0; //в первой строке треугольника нет внутренних пробелов + + +//отрисовываем треугольник по строкам сверху вниз + for (int y = sideSpaceCount; y >= 0; y--) { + sideSpaces.append(SPACE_SYMBOL.repeat(Math.max(0, y + 1))); //пробелы в строке снаружи стреуголника + +//стороны боковых сторон треугольника и пробелы (или черту в самой нижней строке) между ними + for (int x = 0; x < innerSpaceCount; x++) { + if (y != 0) innerSpaces.append(SPACE_SYMBOL); //если не последняя строка, то наполняем пробелами + else innerSpaces.append(HORIZONTAL_SYMBOL); //если последняя - то это основание треугольника + } + +/* строка треугольника состоит из: + * пробелы слева + левая грань + пробелы между гранями + правая грань + пробелы справа + * /\ + * / \ + * /----\ + * + */ + stringToDraw.append + (sideSpaces).append + (TRIANGLE_LEFT_SYMBOL).append + (innerSpaces).append + (TRIANGLE_RIGHT_SYMBOL).append + (sideSpaces).append("\n"); + + sideSpaces = new StringBuilder(); + innerSpaces = new StringBuilder(); + innerSpaceCount += 2; //в следующей строке внутри треугольника будет на 2 пробела больше + } + + return stringToDraw.toString(); + } + }, + SQUARE{ + @Override + public String drawFigure(int size) { + StringBuilder stringToDraw = new StringBuilder(); + String fillingSymbol; + + for (int y = 0; y < size; y++){ + + if (y == 0 || y == size - 1) fillingSymbol = HORIZONTAL_SYMBOL; //first or last line + else fillingSymbol = SPACE_SYMBOL; + + stringToDraw.append(VERTICAL_SYMBOL); //first column + + stringToDraw.append(fillingSymbol.repeat(Math.max(0, size - 2))); + + stringToDraw.append(VERTICAL_SYMBOL + "\n"); //last column + } + return stringToDraw.toString(); + } + }; + final String HORIZONTAL_SYMBOL = "-"; + final String VERTICAL_SYMBOL = "|"; + final String SPACE_SYMBOL = " "; + final String TRIANGLE_LEFT_SYMBOL = "/"; + final String TRIANGLE_RIGHT_SYMBOL = "\\"; + public abstract String drawFigure(int size); +} diff --git a/src/com/walking/lesson18_instanceof_getClass/task1_getClass/Main.java b/src/com/walking/lesson18_instanceof_getClass/task1_getClass/Main.java index 1993f716e..2fd1710b5 100644 --- a/src/com/walking/lesson18_instanceof_getClass/task1_getClass/Main.java +++ b/src/com/walking/lesson18_instanceof_getClass/task1_getClass/Main.java @@ -1,11 +1,40 @@ package com.walking.lesson18_instanceof_getClass.task1_getClass; +import com.walking.lesson18_instanceof_getClass.task1_getClass.model.Animal; +import com.walking.lesson18_instanceof_getClass.task1_getClass.model.Cat; +import com.walking.lesson18_instanceof_getClass.task1_getClass.model.Cow; +import com.walking.lesson18_instanceof_getClass.task1_getClass.model.Dog; + /** * Реализовать задачу * ... * используя getClass(). + *

+ * Реализуйте класс Animal. Реализуйте его наследников: Dog, Cat, Cow. + * Каждый из наследников должен содержать свой метод: woof(), meow() и moo() соответственно. + * Остальные поля и методы суперкласса и наследников реализовать по своему усмотрению, + * если они необходимы. + *

+ * Каждый из методов должен выводить в консоль соответствующую ему строку: + * "woof ", "meow " или "moo". + *

+ * В main() создать и наполнить в произвольном порядке + * объектами разных классов-наследников массив типа Animal. + * Реализовать метод, принимающий массив Animal и вызывающий метод, + * характерный для конкретного животного. */ public class Main { public static void main(String[] args) { + Animal[] animals = {new Cat(), new Cow(), new Dog()}; + soundAll(animals); + } + + private static void soundAll(Animal[] animals){ + for (Animal animal: animals){ + if (animal.getClass().equals(Cat.class)) ((Cat) animal).meow(); + else if (animal.getClass().equals(Dog.class)) ((Dog) animal).woof(); + else if (animal.getClass().equals(Cow.class)) ((Cow) animal).moo(); + else System.out.println("Unknown animal"); + } } } diff --git a/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Animal.java b/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Animal.java new file mode 100644 index 000000000..b214b24de --- /dev/null +++ b/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Animal.java @@ -0,0 +1,6 @@ +package com.walking.lesson18_instanceof_getClass.task1_getClass.model; + +public class Animal { + + +} diff --git a/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Cat.java b/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Cat.java new file mode 100644 index 000000000..65a94027b --- /dev/null +++ b/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Cat.java @@ -0,0 +1,7 @@ +package com.walking.lesson18_instanceof_getClass.task1_getClass.model; + +public class Cat extends Animal{ + public void meow(){ + System.out.println("Meow"); + } +} diff --git a/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Cow.java b/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Cow.java new file mode 100644 index 000000000..c419b3ab7 --- /dev/null +++ b/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Cow.java @@ -0,0 +1,8 @@ +package com.walking.lesson18_instanceof_getClass.task1_getClass.model; + +public class Cow extends Animal{ + + public void moo(){ + System.out.println("Moo"); + } +} diff --git a/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Dog.java b/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Dog.java new file mode 100644 index 000000000..4cb2c86bd --- /dev/null +++ b/src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Dog.java @@ -0,0 +1,7 @@ +package com.walking.lesson18_instanceof_getClass.task1_getClass.model; + +public class Dog extends Animal{ + public void woof(){ + System.out.println("Woof"); + } +} diff --git a/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/Main.java b/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/Main.java index 4f267a04b..cd2e2d0f6 100644 --- a/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/Main.java +++ b/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/Main.java @@ -1,5 +1,8 @@ package com.walking.lesson18_instanceof_getClass.task1_instanceof; +import com.walking.lesson18_instanceof_getClass.task1_instanceof.model.*; + + /** * Реализовать задачу * ... @@ -7,5 +10,16 @@ */ public class Main { public static void main(String[] args) { + Animal[] animals = {new Cat(), new Dog(), new Cow()}; + soundAll(animals); + } + + private static void soundAll(Animal[] animals){ + for (Animal animal: animals){ + if (animal instanceof Cat animalCat) animalCat.meow(); + else if (animal instanceof Dog animalDog) animalDog.woof(); + else if (animal instanceof Cow animalCow) animalCow.moo(); + else System.out.println("Unknown Animal"); + } } } diff --git a/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Animal.java b/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Animal.java new file mode 100644 index 000000000..66792f717 --- /dev/null +++ b/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Animal.java @@ -0,0 +1,6 @@ +package com.walking.lesson18_instanceof_getClass.task1_instanceof.model; + +public class Animal { + + +} diff --git a/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Cat.java b/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Cat.java new file mode 100644 index 000000000..7539d2887 --- /dev/null +++ b/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Cat.java @@ -0,0 +1,7 @@ +package com.walking.lesson18_instanceof_getClass.task1_instanceof.model; + +public class Cat extends Animal { + public void meow(){ + System.out.println("Meow"); + } +} diff --git a/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Cow.java b/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Cow.java new file mode 100644 index 000000000..354dd5466 --- /dev/null +++ b/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Cow.java @@ -0,0 +1,8 @@ +package com.walking.lesson18_instanceof_getClass.task1_instanceof.model; + +public class Cow extends Animal { + + public void moo(){ + System.out.println("Moo"); + } +} diff --git a/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Dog.java b/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Dog.java new file mode 100644 index 000000000..e06223f2e --- /dev/null +++ b/src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Dog.java @@ -0,0 +1,7 @@ +package com.walking.lesson18_instanceof_getClass.task1_instanceof.model; + +public class Dog extends Animal { + public void woof(){ + System.out.println("Woof"); + } +} diff --git a/src/com/walking/lesson19_object_methods/Main.java b/src/com/walking/lesson19_object_methods/Main.java index efef54d5d..6e40533cc 100644 --- a/src/com/walking/lesson19_object_methods/Main.java +++ b/src/com/walking/lesson19_object_methods/Main.java @@ -1,5 +1,10 @@ package com.walking.lesson19_object_methods; +import com.walking.lesson19_object_methods.model.Car; +import com.walking.lesson19_object_methods.model.CarService; + +import java.util.Scanner; + /** * Реализуйте класс «Машина». Поля допустимо выбрать на свое усмотрение, но необходимо, * чтобы по ним можно было однозначно идентифицировать каждую машину. @@ -14,5 +19,32 @@ */ public class Main { public static void main(String[] args) { + Car[] cars = {new Car(2000, "a123aa77", "green", "bmw"), + new Car(2001, "b222bb77", "black", "mercedes"), + new Car(2005, "c111cc777", "white", "audi"), + new Car(2020, "e555ee55", "red", "skoda") + }; + + CarService dataBase = new CarService(cars); + + Scanner io = new Scanner(System.in); + System.out.println("Enter car's manufacture year"); + int year = io.nextInt(); + String tmp = io.nextLine(); //проблема пропуска строки Scanner'ом после nextInt + + System.out.println("Enter plate number"); + String number = io.nextLine().toLowerCase(); + + System.out.println("Enter color"); + String color = io.nextLine().toLowerCase(); + + System.out.println("Enter model"); + String model = io.nextLine().toLowerCase(); + + io.close(); + + Car userCar = new Car(year, number, color, model); + Car foundCar = dataBase.searchCar(userCar); + System.out.println("Found car: " + foundCar); } } diff --git a/src/com/walking/lesson19_object_methods/model/Car.java b/src/com/walking/lesson19_object_methods/model/Car.java new file mode 100644 index 000000000..ba0b61bfd --- /dev/null +++ b/src/com/walking/lesson19_object_methods/model/Car.java @@ -0,0 +1,72 @@ +package com.walking.lesson19_object_methods.model; + +public class Car { + private final int year; + private final String number; + private final String color; + private final String model; + private int hashcode; + + public Car (int year, String number, String color, String model) { + this.year = year; + this. number = number; + this.color = color; + this.model = model; + } + + public int getYear() { + return year; + } + + public String getNumber() { + return number; + } + + public String getColor() { + return color; + } + + public String getModel() { + return model; + } + + @Override + public boolean equals (Object o) { + if (o == this) { + return true; + } + if (o == null) { + return false; + } + if (o.getClass() != getClass()) { + return false; + } + if (hashCode() != o.hashCode()) { + return false; + } + + Car carToCompare = (Car) o; + return carToCompare.year == year && carToCompare.number.equals(number); + } + + @Override + public int hashCode() { + if (hashcode == 0) { + hashcode = year * 31; + hashcode += number == null ? 0 : number.hashCode(); + hashcode += color == null ? 0 : color.hashCode(); + hashcode += model == null ? 0 : model.hashCode(); + } + return hashcode; + } + + @Override + public String toString() { + return color + " " + + model + " " + + year + ", " + + number; +//порядок переменных выбран для более наглядного восприятия: "белая бмв 2000 года, номер ХХХ" + } + +} diff --git a/src/com/walking/lesson19_object_methods/model/CarService.java b/src/com/walking/lesson19_object_methods/model/CarService.java new file mode 100644 index 000000000..9490b215e --- /dev/null +++ b/src/com/walking/lesson19_object_methods/model/CarService.java @@ -0,0 +1,18 @@ +package com.walking.lesson19_object_methods.model; + +public class CarService { + private final Car[] cars; + + public CarService(Car[] allcars) { + this.cars = allcars; + } + + public Car searchCar(Car userCar) { + for (Car car : cars) { + if (car.equals(userCar)) { + return car; + } + } + return null; + } +} diff --git a/src/com/walking/lesson20_exceptions/task1_catchException/Main.java b/src/com/walking/lesson20_exceptions/task1_catchException/Main.java index c59fa62d4..1bb69fdff 100644 --- a/src/com/walking/lesson20_exceptions/task1_catchException/Main.java +++ b/src/com/walking/lesson20_exceptions/task1_catchException/Main.java @@ -1,5 +1,12 @@ package com.walking.lesson20_exceptions.task1_catchException; +import com.walking.lesson20_exceptions.task1_catchException.model.File; +import com.walking.lesson20_exceptions.task1_catchException.model.FileType; +import com.walking.lesson20_exceptions.task1_catchException.service.FileNotFoundException; +import com.walking.lesson20_exceptions.task1_catchException.service.FileService; + +import java.util.Scanner; + /** * Создайте массив, имитирующий простейшую файловую систему и содержащий объекты файлов. *

@@ -15,5 +22,25 @@ */ public class Main { public static void main(String[] args) { + File[] files = {new File("pic1", FileType.IMAGE, 400), + new File("pic2", FileType.IMAGE, 800), + new File("pic3", FileType.IMAGE, 1200), + new File("video1", FileType.VIDEO, 10_000_000), + new File("music1", FileType.AUDIO, 5_000_000), + new File("doc1", FileType.TEXT, 500)}; + + Scanner io = new Scanner(System.in); + System.out.println("Введите имя файла"); + String userFile = io.nextLine(); + io.close(); + + FileService fileService = new FileService(files); + try { + System.out.println(fileService.search(userFile)); + } + catch (FileNotFoundException ex) { + System.out.println("Искомый файл не найден"); + } + } } diff --git a/src/com/walking/lesson20_exceptions/task1_catchException/model/File.java b/src/com/walking/lesson20_exceptions/task1_catchException/model/File.java new file mode 100644 index 000000000..2a4e24c24 --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task1_catchException/model/File.java @@ -0,0 +1,32 @@ +package com.walking.lesson20_exceptions.task1_catchException.model; + +public class File { + private String fileName; + private final FileType fileType; + private int fileSize; + + public File(String fileName, FileType fileType, int fileSize){ + this.fileName = fileName; + this.fileType = fileType; + this.fileSize = fileSize; + } + + @Override + public String toString(){ + return fileName + " " + + fileType + " " + + fileSize; + } + + public String getFileName() { + return fileName; + } + + public FileType getFileType() { + return fileType; + } + + public int getFileSize() { + return fileSize; + } +} diff --git a/src/com/walking/lesson20_exceptions/task1_catchException/model/FileType.java b/src/com/walking/lesson20_exceptions/task1_catchException/model/FileType.java new file mode 100644 index 000000000..4f233068a --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task1_catchException/model/FileType.java @@ -0,0 +1,8 @@ +package com.walking.lesson20_exceptions.task1_catchException.model; + +public enum FileType { + TEXT, + IMAGE, + AUDIO, + VIDEO +} diff --git a/src/com/walking/lesson20_exceptions/task1_catchException/service/FileNotFoundException.java b/src/com/walking/lesson20_exceptions/task1_catchException/service/FileNotFoundException.java new file mode 100644 index 000000000..350118faa --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task1_catchException/service/FileNotFoundException.java @@ -0,0 +1,7 @@ +package com.walking.lesson20_exceptions.task1_catchException.service; + +public class FileNotFoundException extends Exception{ + public FileNotFoundException(String message) { + super(message); + } +} diff --git a/src/com/walking/lesson20_exceptions/task1_catchException/service/FileService.java b/src/com/walking/lesson20_exceptions/task1_catchException/service/FileService.java new file mode 100644 index 000000000..7d24c994f --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task1_catchException/service/FileService.java @@ -0,0 +1,19 @@ +package com.walking.lesson20_exceptions.task1_catchException.service; + +import com.walking.lesson20_exceptions.task1_catchException.model.File; +public class FileService { + private File[] files; + + public FileService (File[] files) { + this.files = files; + } + + public File search (String userFile) throws FileNotFoundException { + for (File file : files) { + if (userFile.equals(file.getFileName())) { + return file; + } + } + throw new FileNotFoundException ("Искомый файл не найден"); + } +} diff --git a/src/com/walking/lesson20_exceptions/task1_throwsException/Main.java b/src/com/walking/lesson20_exceptions/task1_throwsException/Main.java index 368d583c8..225852303 100644 --- a/src/com/walking/lesson20_exceptions/task1_throwsException/Main.java +++ b/src/com/walking/lesson20_exceptions/task1_throwsException/Main.java @@ -1,5 +1,14 @@ package com.walking.lesson20_exceptions.task1_throwsException; + +import com.walking.lesson20_exceptions.task1_throwsException.model.FileType; +import com.walking.lesson20_exceptions.task1_throwsException.model.File; +import com.walking.lesson20_exceptions.task1_throwsException.service.FileNotFoundException; +import com.walking.lesson20_exceptions.task1_throwsException.service.FileService; + + +import java.util.Scanner; + /** * Создайте массив, имитирующий простейшую файловую систему и содержащий объекты файлов. *

@@ -16,6 +25,22 @@ * Подсказка: throws можно использовать в том числе в main(). */ public class Main { - public static void main(String[] args) { + public static void main(String[] args) throws FileNotFoundException { + File[] files = {new File("pic1", FileType.IMAGE, 400), + new File("pic2", FileType.IMAGE, 800), + new File("pic3", FileType.IMAGE, 1200), + new File("video1", FileType.VIDEO, 10_000_000), + new File("music1", FileType.AUDIO, 5_000_000), + new File("doc1", FileType.TEXT, 500)}; + + Scanner io = new Scanner(System.in); + + System.out.println("Введите имя файла"); + String userFile = io.nextLine(); + + io.close(); + + FileService fileService = new FileService(files); + System.out.println(fileService.search(userFile)); } } diff --git a/src/com/walking/lesson20_exceptions/task1_throwsException/model/File.java b/src/com/walking/lesson20_exceptions/task1_throwsException/model/File.java new file mode 100644 index 000000000..d8464aa84 --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task1_throwsException/model/File.java @@ -0,0 +1,32 @@ +package com.walking.lesson20_exceptions.task1_throwsException.model; + +public class File { + private String fileName; + private FileType fileType; + private int fileSize; + + public File(String fileName, FileType type, int size) { + this.fileName = fileName; + this.fileType = type; + this.fileSize = size; + } + + public String getFileName() { + return fileName; + } + + public FileType getFileType() { + return fileType; + } + + public int getFileSize() { + return fileSize; + } + + @Override + public String toString(){ + return fileName + " " + + fileType + " " + + fileSize; + } +} diff --git a/src/com/walking/lesson20_exceptions/task1_throwsException/model/FileType.java b/src/com/walking/lesson20_exceptions/task1_throwsException/model/FileType.java new file mode 100644 index 000000000..03bc09866 --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task1_throwsException/model/FileType.java @@ -0,0 +1,8 @@ +package com.walking.lesson20_exceptions.task1_throwsException.model; + +public enum FileType { + TEXT, + IMAGE, + AUDIO, + VIDEO +} diff --git a/src/com/walking/lesson20_exceptions/task1_throwsException/service/FileNotFoundException.java b/src/com/walking/lesson20_exceptions/task1_throwsException/service/FileNotFoundException.java new file mode 100644 index 000000000..27067acdf --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task1_throwsException/service/FileNotFoundException.java @@ -0,0 +1,7 @@ +package com.walking.lesson20_exceptions.task1_throwsException.service; + +public class FileNotFoundException extends Exception{ + public FileNotFoundException(String message) { + super(message); + } +} diff --git a/src/com/walking/lesson20_exceptions/task1_throwsException/service/FileService.java b/src/com/walking/lesson20_exceptions/task1_throwsException/service/FileService.java new file mode 100644 index 000000000..da18c91b9 --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task1_throwsException/service/FileService.java @@ -0,0 +1,20 @@ +package com.walking.lesson20_exceptions.task1_throwsException.service; + +import com.walking.lesson20_exceptions.task1_throwsException.model.File; + +public class FileService { + private File[] files; + + public FileService(File[] files) { + this.files = files; + } + + public File search(String userFile) throws FileNotFoundException { + for (File file : files) { + if (userFile.equals(file.getFileName())) { + return file; + } + } + throw new FileNotFoundException("Искомый файл не найден"); + } +} diff --git a/src/com/walking/lesson20_exceptions/task2/Main.java b/src/com/walking/lesson20_exceptions/task2/Main.java index cccb443bf..263daa6cb 100644 --- a/src/com/walking/lesson20_exceptions/task2/Main.java +++ b/src/com/walking/lesson20_exceptions/task2/Main.java @@ -1,5 +1,12 @@ package com.walking.lesson20_exceptions.task2; +import com.walking.lesson20_exceptions.task2.model.Figure; +import com.walking.lesson20_exceptions.task2.model.Square; +import com.walking.lesson20_exceptions.task2.model.Triangle; +import com.walking.lesson20_exceptions.task2.service.InputValidationException; + +import java.util.Scanner; + /** * Реализуйте любой из вариантов Задачи 1 в уроке 16. * При некорректном вводе с клавиатуры выбрасывайте собственное исключение InputValidationException. @@ -9,5 +16,28 @@ */ public class Main { public static void main(String[] args) { + Scanner io = new Scanner(System.in); + + System.out.println("Enter '1' for square, '2' for triangle"); + int userFigure = io.nextInt(); + if (userFigure != 1 && userFigure != 2) { + throw new InputValidationException("You have chosen incorrect figure"); + } + + System.out.println("Enter figure width"); + int userWidth = io.nextInt(); + if (userWidth <= 2 || userWidth > 30) { + throw new InputValidationException("Width must be 2 - 30"); + } + + io.close(); + + Figure figure; + if (userFigure == 1) { + figure = new Square(); + } else { + figure = new Triangle(); + } + System.out.println(figure.buildFigure(userWidth)); } } diff --git a/src/com/walking/lesson20_exceptions/task2/model/Figure.java b/src/com/walking/lesson20_exceptions/task2/model/Figure.java new file mode 100644 index 000000000..32eaeedac --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task2/model/Figure.java @@ -0,0 +1,9 @@ +package com.walking.lesson20_exceptions.task2.model; + +public interface Figure { + String VERTICAL_SYMBOL = "|"; + String HORIZONTAL_SYMBOL = "-"; + String FILLING_SYMBOL = " "; + + String buildFigure(int width); +} diff --git a/src/com/walking/lesson20_exceptions/task2/model/Square.java b/src/com/walking/lesson20_exceptions/task2/model/Square.java new file mode 100644 index 000000000..0b5bc6663 --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task2/model/Square.java @@ -0,0 +1,22 @@ +package com.walking.lesson20_exceptions.task2.model; + +public class Square implements Figure{ + + @Override + public String buildFigure(int width) { + StringBuilder returnString = new StringBuilder(); + + returnString.append(HORIZONTAL_SYMBOL.repeat(width)); + returnString.append("\n"); + + for (int y = 1; y < width-1; y++) { + returnString.append(VERTICAL_SYMBOL); + returnString.append(FILLING_SYMBOL.repeat(width - 2)); + returnString.append(VERTICAL_SYMBOL + "\n"); + } + returnString.append(HORIZONTAL_SYMBOL.repeat(width)); + returnString.append("\n"); + + return returnString.toString(); + } +} diff --git a/src/com/walking/lesson20_exceptions/task2/model/Triangle.java b/src/com/walking/lesson20_exceptions/task2/model/Triangle.java new file mode 100644 index 000000000..da836ebf2 --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task2/model/Triangle.java @@ -0,0 +1,29 @@ +package com.walking.lesson20_exceptions.task2.model; + +public class Triangle implements Figure{ + private static final String LEFT_TRIANGLE_SYMBOL = "/"; + private static final String RIGHT_TRIANGLE_SYMBOL = "\\"; + + @Override + public String buildFigure(int width) { + StringBuilder returnString = new StringBuilder(); + int sideSpaces = (width / 2) - 1; + int innerSpaces = 0; + + for (int y = 0; y <= width / 2 - 1; y++) { + returnString.append(FILLING_SYMBOL.repeat(sideSpaces)); + returnString.append(LEFT_TRIANGLE_SYMBOL); + returnString.append(FILLING_SYMBOL.repeat(innerSpaces)); + returnString.append(RIGHT_TRIANGLE_SYMBOL); + returnString.append(FILLING_SYMBOL.repeat(sideSpaces)); + returnString.append("\n"); + sideSpaces--; + innerSpaces += 2; + } + + returnString.append(HORIZONTAL_SYMBOL.repeat(width / 2 * 2)); + returnString.append("\n"); + + return returnString.toString(); + } +} diff --git a/src/com/walking/lesson20_exceptions/task2/service/InputValidationException.java b/src/com/walking/lesson20_exceptions/task2/service/InputValidationException.java new file mode 100644 index 000000000..d2a1229cb --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task2/service/InputValidationException.java @@ -0,0 +1,7 @@ +package com.walking.lesson20_exceptions.task2.service; + +public class InputValidationException extends RuntimeException{ + public InputValidationException(String message) { + super(message); + } +} diff --git a/src/com/walking/lesson20_exceptions/task3/Main.java b/src/com/walking/lesson20_exceptions/task3/Main.java index 3b81b191c..0a1a112fc 100644 --- a/src/com/walking/lesson20_exceptions/task3/Main.java +++ b/src/com/walking/lesson20_exceptions/task3/Main.java @@ -1,5 +1,9 @@ package com.walking.lesson20_exceptions.task3; +import com.walking.lesson20_exceptions.task3.exeptions.ArrayValidationException; +import com.walking.lesson20_exceptions.task3.exeptions.UnknownAnimalException; +import com.walking.lesson20_exceptions.task3.model.*; + /** * Реализуйте любой из вариантов задачи в уроке 18. * Для ситуации, когда тип животного неизвестен, выбрасывайте собственное исключение UnknownAnimalException. @@ -11,5 +15,24 @@ */ public class Main { public static void main(String[] args) { + Animal[] animals = {new Cat(), new Dog(), new Cow()}; + soundAll(animals); + } + + private static void soundAll (Animal[] animals) { + for (int i = 0; i < animals.length; i++) { + if (animals[i] == null) { + throw new ArrayValidationException(i); + } + if (Cat.class.equals(animals[i].getClass())) { + ((Cat) animals[i]).meow(); + } else if (Cow.class.equals(animals[i].getClass())) { + ((Cow) animals[i]).moo(); + } else if (Dog.class.equals(animals[i].getClass())) { + ((Dog) animals[i]).woof(); + } else { + throw new UnknownAnimalException("Unknown animal"); + } + } } } diff --git a/src/com/walking/lesson20_exceptions/task3/exeptions/ArrayValidationException.java b/src/com/walking/lesson20_exceptions/task3/exeptions/ArrayValidationException.java new file mode 100644 index 000000000..0aae999ea --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task3/exeptions/ArrayValidationException.java @@ -0,0 +1,7 @@ +package com.walking.lesson20_exceptions.task3.exeptions; + +public class ArrayValidationException extends RuntimeException { + public ArrayValidationException (int index) { + super(index + " item in array is null"); + } +} diff --git a/src/com/walking/lesson20_exceptions/task3/exeptions/UnknownAnimalException.java b/src/com/walking/lesson20_exceptions/task3/exeptions/UnknownAnimalException.java new file mode 100644 index 000000000..f927d86bf --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task3/exeptions/UnknownAnimalException.java @@ -0,0 +1,7 @@ +package com.walking.lesson20_exceptions.task3.exeptions; + +public class UnknownAnimalException extends RuntimeException{ + public UnknownAnimalException (String message) { + super(message); + } +} diff --git a/src/com/walking/lesson20_exceptions/task3/model/Animal.java b/src/com/walking/lesson20_exceptions/task3/model/Animal.java new file mode 100644 index 000000000..90d2693aa --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task3/model/Animal.java @@ -0,0 +1,13 @@ +package com.walking.lesson20_exceptions.task3.model; + +public class Animal { + private final String sound; + + protected Animal(String sound) { + this.sound = sound; + } + + protected void sound () { + System.out.println(sound); + } +} diff --git a/src/com/walking/lesson20_exceptions/task3/model/Cat.java b/src/com/walking/lesson20_exceptions/task3/model/Cat.java new file mode 100644 index 000000000..81b3a8575 --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task3/model/Cat.java @@ -0,0 +1,11 @@ +package com.walking.lesson20_exceptions.task3.model; + +public class Cat extends Animal { + public Cat() { + super("meow"); + } + + public void meow() { + super.sound(); + } +} diff --git a/src/com/walking/lesson20_exceptions/task3/model/Cow.java b/src/com/walking/lesson20_exceptions/task3/model/Cow.java new file mode 100644 index 000000000..cbbef6d6f --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task3/model/Cow.java @@ -0,0 +1,11 @@ +package com.walking.lesson20_exceptions.task3.model; + +public class Cow extends Animal { + public Cow() { + super("moo"); + } + + public void moo() { + super.sound(); + } +} diff --git a/src/com/walking/lesson20_exceptions/task3/model/Dog.java b/src/com/walking/lesson20_exceptions/task3/model/Dog.java new file mode 100644 index 000000000..97de62fff --- /dev/null +++ b/src/com/walking/lesson20_exceptions/task3/model/Dog.java @@ -0,0 +1,11 @@ +package com.walking.lesson20_exceptions.task3.model; + +public class Dog extends Animal{ + public Dog() { + super("woof"); + } + + public void woof() { + super.sound(); + } +}