Lesson 4 homework solution
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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 +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user