diff --git a/basics/src/main/java/ru/msu/vmk/NumberSample.java b/basics/src/main/java/ru/msu/vmk/NumberSample.java index 9961ed3..b75923f 100644 --- a/basics/src/main/java/ru/msu/vmk/NumberSample.java +++ b/basics/src/main/java/ru/msu/vmk/NumberSample.java @@ -3,9 +3,26 @@ import java.math.BigDecimal; public class NumberSample { + public static void main(String[] args) { + // вызов split - проверка работы + BigDecimal amount = new BigDecimal("100"); + int n = 3; + BigDecimal[] parts = split(amount, n); + for (BigDecimal part : parts) { + System.out.println(part); + } + + } public static BigDecimal[] split(BigDecimal amount, int n) { + var result = amount.divide(new BigDecimal(n)); + var reminder = amount.remainder(new BigDecimal(n)); + var array = new BigDecimal[n]; + for (int i=0; i < n; i++) { + array[i] = result; + } + // разделить amount на n частей // если остается остаток, прибавить его к первому числу - return null; + return array; } } diff --git a/collections/src/main/java/ru/msu/vmk/LibraryImpl.java b/collections/src/main/java/ru/msu/vmk/LibraryImpl.java index 60162b9..71e411b 100644 --- a/collections/src/main/java/ru/msu/vmk/LibraryImpl.java +++ b/collections/src/main/java/ru/msu/vmk/LibraryImpl.java @@ -1,25 +1,34 @@ package ru.msu.vmk; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class LibraryImpl implements Library{ + private final ArrayList libraryAvailebleBooks = new ArrayList<>(); + private final Map mapBorrowBooks = new HashMap<>(); @Override public void addNewBook(Book book) { - +libraryAvailebleBooks.add(book); } @Override public void borrowBook(Book book, String student) { - +libraryAvailebleBooks.contains(book); +mapBorrowBooks.put(book, student); +libraryAvailebleBooks.remove(book); } @Override public void returnBook(Book book, String student) { - +String borrowedbyStudent = mapBorrowBooks.get(book); +mapBorrowBooks.remove(book); +libraryAvailebleBooks.add(book); } @Override public List findAvailableBooks() { - return null; + return new ArrayList<>(libraryAvailebleBooks); } } diff --git a/object-oriented-programming/src/main/java/ru/msu/vmk/Quantity.java b/object-oriented-programming/src/main/java/ru/msu/vmk/Quantity.java index 6c1810e..c7c3269 100644 --- a/object-oriented-programming/src/main/java/ru/msu/vmk/Quantity.java +++ b/object-oriented-programming/src/main/java/ru/msu/vmk/Quantity.java @@ -1,6 +1,8 @@ package ru.msu.vmk; import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Objects; /** * По примеру класса {@link Money} реализовать класс Quantity: @@ -17,64 +19,121 @@ public class Quantity { * @param amount - сумма * @param unitOfMeasurement - единица измерения */ + private final BigDecimal amount; + private final String unitOfMeasurement; + public Quantity(BigDecimal amount, String unitOfMeasurement) { + if (amount == null) { + throw new IllegalArgumentException("Amount cannot be null"); + } + if (unitOfMeasurement == null || unitOfMeasurement.isBlank()) { + throw new IllegalArgumentException("unit Of Measurement cannot be empty"); + } + this.amount = amount.setScale(2, RoundingMode.HALF_EVEN); + this.unitOfMeasurement = unitOfMeasurement; } /** * Get метод для {@link Quantity#amount} + * * @return {@link Quantity#amount} */ + public BigDecimal getAmount() { - return null; + return amount; + } + + public String getunitOfMeasurement() { + return unitOfMeasurement; } /** * Сложение двух чисел в одной единице измерения - * @throws Exception в случае различных единиц измерения + * * @param quantity прибавляемое значение * @return сумма чисел + * @throws Exception в случае различных единиц измерения */ - public Quantity add(Quantity quantity) throws Exception { - return null; + public Quantity add(Quantity q2) throws Exception { + checkUnitCompatibility(q2); + BigDecimal sum = this.amount.add(q2.amount); + return new Quantity(sum, this.unitOfMeasurement); } /** * Разность двух чисел в одной единице измерения - * @throws Exception в случае различных единиц измерения + * * @param quantity вычитаемое значение * @return разность чисел + * @throws Exception в случае различных единиц измерения */ - public Quantity subtract(Quantity quantity) throws Exception { - return null; + public Quantity subtract(Quantity q2) throws Exception { + checkUnitCompatibility(q2); + BigDecimal difference = this.amount.subtract(q2.amount); + return new Quantity(difference, this.unitOfMeasurement); } /** * Умножение двух чисел в одной единице измерения - * @throws Exception в случае различных единиц измерения + * * @param quantity множитель * @return произведение + * @throws Exception в случае различных единиц измерения */ - public Quantity multiply(Quantity quantity) throws Exception { - return null; + public Quantity multiply(Quantity q2) throws Exception { + checkUnitCompatibility(q2); + return new Quantity(this.amount.multiply(q2.amount), this.unitOfMeasurement); } /** * Частное двух чисел в одной единице измерения - * @throws Exception в случае различных единиц измерения + * * @param quantity делитель * @return частное + * @throws Exception в случае различных единиц измерения */ - public Quantity divide(Quantity quantity) throws Exception { - return null; + public Quantity divide(Quantity q2) throws Exception { + checkUnitCompatibility(q2); + if (q2.amount.compareTo(BigDecimal.ZERO) == 0) { + throw new IllegalArgumentException("Cannot divide by zero"); + } + return new Quantity(this.amount.divide(q2.amount, 2, RoundingMode.HALF_UP), this.unitOfMeasurement); } /** * Деление amount на n равных частей * если остается остаток, он прибавляется к первому числу + * * @param n делитель * @return равные части числа */ public Quantity[] divide(int n) throws Exception { - return null; - } + if (n <= 0) { + throw new IllegalArgumentException("The divider must be a positive number."); + } + var array = new Quantity[n]; + BigDecimal a = this.amount.divide(BigDecimal.valueOf(n), 2, RoundingMode.HALF_UP); + BigDecimal difference = this.amount.subtract(a.multiply(BigDecimal.valueOf(n))); + + if (difference.compareTo(BigDecimal.ZERO) > 0) { + BigDecimal a0 = this.amount.remainder(BigDecimal.valueOf(n)); + BigDecimal a1 = this.amount.subtract(a0); + BigDecimal a2 = a1.divide(BigDecimal.valueOf(n)); + array[0] = new Quantity(a2.add(a0), this.unitOfMeasurement); + for (int i = 1; i < n; i++) { + array[i] = new Quantity(a2, this.unitOfMeasurement); + } + } else { + for (int i = 0; i < n; i++) { + array[i] = new Quantity(a, this.unitOfMeasurement); + } + } + return array; } + + private void checkUnitCompatibility(Quantity q2) { + if (!this.unitOfMeasurement.equals(q2.unitOfMeasurement)) { + throw new IllegalArgumentException("Units are incompatible: " + this.unitOfMeasurement + " " + q2.unitOfMeasurement); + } + } +} \ No newline at end of file