From 629438b80560116054a8d1969ddd22c26cf1009a Mon Sep 17 00:00:00 2001 From: Leonid Date: Fri, 11 Apr 2025 23:08:49 +0300 Subject: [PATCH] Lesson 4 homework solution --- .../generics_collections/Task1.java | 35 +++++ .../generics_collections/Task2.java | 24 ++++ .../generics_collections/Task3.java | 125 ++++++++++++++++++ 3 files changed, 184 insertions(+) create mode 100644 src/main/java/com/algos/vtb/exceptions/generics_collections/Task1.java create mode 100644 src/main/java/com/algos/vtb/exceptions/generics_collections/Task2.java create mode 100644 src/main/java/com/algos/vtb/exceptions/generics_collections/Task3.java diff --git a/src/main/java/com/algos/vtb/exceptions/generics_collections/Task1.java b/src/main/java/com/algos/vtb/exceptions/generics_collections/Task1.java new file mode 100644 index 0000000..95e4e8b --- /dev/null +++ b/src/main/java/com/algos/vtb/exceptions/generics_collections/Task1.java @@ -0,0 +1,35 @@ +package com.algos.vtb.exceptions.generics_collections; + +import java.util.Arrays; + +//Написать метод, который меняет два элемента массива местами (массив может быть любого +// ссылочного типа). +public class Task1 { + + public static void main(String[] args) { + + String[] strArray = new String[]{"a", "c", "b"}; + System.out.println("before : " + Arrays.toString(strArray)); + System.out.println("after : " + Arrays.toString(exchangeElements(1, 2, strArray))); + + Integer[] intArray = new Integer[]{20, 19, 22, 21}; + System.out.println("before : " + Arrays.toString(intArray)); + exchangeElements(0, 1, intArray); + exchangeElements(2, 3, intArray); + System.out.println("after : " + Arrays.toString(intArray)); + + } + + public static T[] exchangeElements(int i, int j, T[] array) { + + if (i >= array.length || j >= array.length) { + throw new IllegalArgumentException("Индекс превышает размер массива"); + } + + T temp = array[i]; + array[i] = array[j]; + array[j] = temp; + + return array; + } +} diff --git a/src/main/java/com/algos/vtb/exceptions/generics_collections/Task2.java b/src/main/java/com/algos/vtb/exceptions/generics_collections/Task2.java new file mode 100644 index 0000000..db20c74 --- /dev/null +++ b/src/main/java/com/algos/vtb/exceptions/generics_collections/Task2.java @@ -0,0 +1,24 @@ +package com.algos.vtb.exceptions.generics_collections; + +import java.util.Arrays; +import java.util.List; + +public class Task2 { + +// Написать метод, который преобразует массив в ArrayList. + public static void main(String[] args) { + + String[] strArray = new String[]{"one", "two", "three", "four"}; + List strList = convertArrayToArrayList(strArray); + System.out.println(strList.getClass().getSimpleName() + ": " + strList); + + Integer[] intArray = new Integer[]{5, 4, 3, 2, 1}; + List intList = convertArrayToArrayList(intArray); + System.out.println(intList.getClass().getSimpleName() + ": " +intList); + } + + public static List convertArrayToArrayList(T[] array ) { + + return Arrays.asList(array); + } +} diff --git a/src/main/java/com/algos/vtb/exceptions/generics_collections/Task3.java b/src/main/java/com/algos/vtb/exceptions/generics_collections/Task3.java new file mode 100644 index 0000000..b0bce79 --- /dev/null +++ b/src/main/java/com/algos/vtb/exceptions/generics_collections/Task3.java @@ -0,0 +1,125 @@ +package com.algos.vtb.exceptions.generics_collections; + +//a. Даны классы Fruit -> Apple, Orange. +// b. Класс Box, в который можно складывать фрукты. Коробки условно сортируются по типу +// фрукта, поэтому в одну коробку нельзя сложить и яблоки, и апельсины. +// c. +// Для хранения фруктов внутри коробки можно использовать ArrayList. +// d. Написать метод getWeight(), который высчитывает вес коробки. Задать вес одного +// фрукта и их количество: вес яблока — 1.0f, апельсина — 1.5f (единицы измерения не +// важны). +// e. Внутри класса Box написать метод Compare, который позволяет сравнить текущую +// коробку с той, которую подадут в Compare в качестве параметра. True, если их массы +// равны, False — в противном случае. Можно сравнивать коробки с яблоками и +// апельсинами. +// f. +// Написать метод, который позволяет пересыпать фрукты из текущей коробки в другую. +// Помним про сортировку фруктов: нельзя высыпать яблоки в коробку с апельсинами. +// Соответственно, в текущей коробке фруктов не остаётся, а в другую перекидываются +// объекты, которые были в первой. +// g. Не забываем про метод добавления фрукта в коробку. + +import java.util.ArrayList; +import java.util.List; + +public class Task3 { + + public static void main(String[] args) { + Box boxOfApples = new Box<>(); + boxOfApples.addFruit(new Apple()); + boxOfApples.addFruit(new Apple()); + boxOfApples.addFruit(new Apple()); +// boxOfApples.addFruit(new Orange()); + System.out.println(boxOfApples.getWeight()); + System.out.println(boxOfApples); + + Box boxOfOranges = new Box<>(); + boxOfOranges.addFruit(new Orange()); + boxOfOranges.addFruit(new Orange()); + System.out.println(boxOfOranges.getWeight()); + System.out.println(boxOfOranges); + + System.out.println(boxOfOranges.compare(boxOfApples)); + +// boxOfApples.moveTo(boxOfOranges); + + } + +} + +abstract class Fruit { + protected float weight; + + public Fruit(float weight) { + this.weight = weight; + } + + public float getWeight() { + return weight; + } +} + +class Apple extends Fruit { + + public Apple() { + super(1.0f); + } + + @Override + public String toString() { + return "Apple{" + + "weight=" + weight + + '}'; + } +} + +class Orange extends Fruit { + + public Orange() { + super(1.5f); + } + + @Override + public String toString() { + return "Orange{" + + "weight=" + weight + + '}'; + } +} + +class Box { + private final List storage = new ArrayList<>(); + + public void addFruit(T fruit) { + storage.add(fruit); + } + + public double getWeight() { + + return storage.stream().mapToDouble(Fruit::getWeight).sum(); + } + + public boolean compare(Box box) { + +// return box.getWeight() == this.getWeight(); + return Math.abs(box.getWeight() - this.getWeight()) < 0.00001; + } + + public Box moveTo(Box boxSource) { + + if (boxSource == this) { + throw new IllegalArgumentException("Could not move elements to itself"); + } + + storage.forEach(boxSource::addFruit); + storage.clear(); + return boxSource; + } + + @Override + public String toString() { + return "Box{" + + "storage=" + storage + + '}'; + } +} \ No newline at end of file