Lesson 4 homework solution

This commit is contained in:
Leonid
2025-04-11 23:08:49 +03:00
parent d125a16368
commit 629438b805
3 changed files with 184 additions and 0 deletions

View File

@@ -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> 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;
}
}

View File

@@ -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<String> strList = convertArrayToArrayList(strArray);
System.out.println(strList.getClass().getSimpleName() + ": " + strList);
Integer[] intArray = new Integer[]{5, 4, 3, 2, 1};
List<Integer> intList = convertArrayToArrayList(intArray);
System.out.println(intList.getClass().getSimpleName() + ": " +intList);
}
public static <T> List<T> convertArrayToArrayList(T[] array ) {
return Arrays.asList(array);
}
}

View File

@@ -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<Apple> 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<Orange> 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<T extends Fruit> {
private final List<T> 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<T> moveTo(Box<T> 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 +
'}';
}
}