Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion basics/src/main/java/ru/msu/vmk/NumberSample.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
17 changes: 13 additions & 4 deletions collections/src/main/java/ru/msu/vmk/LibraryImpl.java
Original file line number Diff line number Diff line change
@@ -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<Book> libraryAvailebleBooks = new ArrayList<>();
private final Map<Book, String> 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<Book> findAvailableBooks() {
return null;
return new ArrayList<>(libraryAvailebleBooks);
}
}
89 changes: 74 additions & 15 deletions object-oriented-programming/src/main/java/ru/msu/vmk/Quantity.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package ru.msu.vmk;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Objects;

/**
* По примеру класса {@link Money} реализовать класс Quantity:
Expand All @@ -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);
}
}
}