diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task1/Subtask_1.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task1/Subtask_1.java new file mode 100644 index 00000000..7de95cc4 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task1/Subtask_1.java @@ -0,0 +1,31 @@ +package ru.tn.courses.vbogatyrev.v1.task1; + +import java.util.Scanner; + +public class Subtask_1 { + /** + * Дан массив натуральных чисел. Найти сумму элементов, кратных данному K. + **/ + + public static void main(String[] args) { + + int[] array = new int[10]; + Scanner scanner = new Scanner(System.in); + + System.out.println("введите k:"); + + int k = scanner.nextInt(); + int sum = 0; + + System.out.println("введите массив размера 10:"); + + for (int i : array) { + array[i] = scanner.nextInt(); + if (array[i] % k == 0) { + sum += array[i]; + } + } + + System.out.println("сумма элементов массива кратных числу k = " + sum); + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task1/Subtask_2.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task1/Subtask_2.java new file mode 100644 index 00000000..32c5cfcd --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task1/Subtask_2.java @@ -0,0 +1,36 @@ +package ru.tn.courses.vbogatyrev.v1.task1; + +import java.util.Scanner; + +public class Subtask_2 { + /** + * У прилавка магазина выстроилась очередь из n покупателей. Время обслуживания i-того покупателя равно tj (i = 1, + * …, n). Определить время Ci пребывания i-гo покупателя в очереди. + */ + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + System.out.println("Введите длину очереди n:"); + + int n = scanner.nextInt(); + double[] t = new double[n]; + double[] c = new double[n]; + + System.out.println("Введите время обслуживания i покупателя:"); + + for (int i = 0; i < n; i++) { + t[i] = scanner.nextDouble(); + if (i == 0) { + c[i] = 0; + } else { + c[i] = c[i - 1] + t[i - 1]; + } + } + + System.out.println("Введите пребывания i покупателя в очереди:"); + for (int i = 0; i < n; i++) { + System.out.println(i + 1 + " покупатель : " + c[i] + " единиц времени в очереди"); + } + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task1/Subtask_3.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task1/Subtask_3.java new file mode 100644 index 00000000..c549c3ea --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task1/Subtask_3.java @@ -0,0 +1,39 @@ +package ru.tn.courses.vbogatyrev.v1.task1; + +import java.util.Scanner; + +public class Subtask_3 { + /** + * Даны две последовательности a1 ≤ a2 ≤ ... ≤ аn и b1 ≤ b2 ≤ ... ≤ bn. Образовать из них новую последовательность + * чисел так, чтобы она тоже была неубывающей (дополнительный массив не использовать). + */ + + public static void main(String[] args) { + int[] a, b, c; + Scanner scanner = new Scanner(System.in); + + System.out.println("Введите длину последовательностей n:"); + + int n = scanner.nextInt(); + a = new int[n]; + b = new int[n]; + + System.out.println("Введите последовательность a:"); + for (int i = 0; i < n; i++) { + a[i] = scanner.nextInt(); + } + + System.out.println("Введите последовательность b:"); + for (int i = 0; i < n; i++) { + b[i] = scanner.nextInt(); + } + + System.out.println("Новая последовательность без нового массива:"); + for (int i = 0, j = 0; i < n && j < n; j++) { + while (i < n && a[i] <= b[j]) { + System.out.println(a[i++]); + } + System.out.println(b[j]); + } + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/Subtask_2.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/Subtask_2.java new file mode 100644 index 00000000..0967f099 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/Subtask_2.java @@ -0,0 +1,94 @@ +package ru.tn.courses.vbogatyrev.v1.task2; + +import ru.tn.courses.vbogatyrev.v1.task2.business.InternetShop; +import ru.tn.courses.vbogatyrev.v1.task2.business.MyShop; +import ru.tn.courses.vbogatyrev.v1.task2.models.Customer; +import ru.tn.courses.vbogatyrev.v1.task2.repositories.CustomerRepository; +import ru.tn.courses.vbogatyrev.v1.task2.repositories.OrderRepository; + +import java.util.Scanner; + +public class Subtask_2 { + + /** + * - Необходимо разработать модель (класс) описывающий товар из интернет магазина (можно взять на свой выбор: + * телефоны, машины). - Необходимо разработать интерфейс для обработки заказов интернет магазина. - Реализовать + * классы обработки событий: создание заказа, изменения по заказу, возврат заказа. - Необходимо оформить все + * перечисления через enum - Вынести общую логику в абстракцию + */ + public static void main(String[] args) { + + OrderRepository orderRepository = OrderRepository.getInstance(); + CustomerRepository customerRepository = CustomerRepository.getInstance(); + + InternetShop shop = new MyShop(); + Scanner scanner = new Scanner(System.in); + + System.out.println("введите команду: \n" + "exit: выйти\n" + "help: справка\n" + "create: создать заказ\n" + + "return: вернуть товар\n" + "modif: изменить заказ\n" + "payment: оплатить\n" + + "catalog: вывести католог товаров\n" + "orders: вывести список заказов\n"); + while (true) { + try { + switch (scanner.nextLine()) { + case "help": + System.out.println("exit: выйти\n" + "help: справка\n" + "create: создать заказ\n" + + "return: вернуть товар\n" + "modif: изменить заказ\n" + + "payment: оплатить\n" + "catalog: вывести католог товаров\n" + + "orders: вывести список заказов\n" + "reg: регистрация пользователя\n" + + "users: список пользователей"); + break; + case "exit": + System.exit(1); + break; + case "create": + System.out.println("введите свое имя: "); + String customerName = scanner.nextLine(); + System.out.println("выберите товар который хотите купить: (введите id товара для покупки)"); + System.out.println(shop.catalog()); + shop.createOrder(Integer.valueOf(scanner.nextLine()), customerName); + System.out.println("Заказ был успешно создан"); + break; + case "orders": + System.out.println(orderRepository.findAll()); + break; + case "catalog": + System.out.println(shop.catalog()); + break; + case "modif": + System.out.println("введите id заказа"); + Integer orderId = Integer.valueOf(scanner.nextLine()); + System.out.println("выберите товар который хотите купить:"); + System.out.println(shop.catalog()); + shop.modifOrder(orderId, Integer.valueOf(scanner.nextLine())); + System.out.println("заказ успешно изменен"); + break; + case "payment": + System.out.println("введите id заказа"); + orderId = Integer.valueOf(scanner.nextLine()); + shop.payment(orderId); + System.out.println("оплата успешно произведена"); + break; + case "return": + System.out.println("введите id заказа:"); + shop.returnProduct(Integer.valueOf(scanner.nextLine())); + System.out.println("возврат успешно выполнен"); + break; + case "reg": + System.out.println("введите имя"); + String name = scanner.nextLine(); + System.out.println("введите скок денег на счету XD"); + customerRepository.save(new Customer(customerRepository.getSize(), name, Double.valueOf(scanner.nextLine()))); + System.out.println("пользователь успешно создан"); + break; + case "users": + System.out.println(customerRepository.findAll()); + break; + default: + System.out.println("команда не понятна, help - справка"); + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/business/InternetShop.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/business/InternetShop.java new file mode 100644 index 00000000..30f15022 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/business/InternetShop.java @@ -0,0 +1,15 @@ +package ru.tn.courses.vbogatyrev.v1.task2.business; + +import ru.tn.courses.vbogatyrev.v1.task2.models.Order; +import ru.tn.courses.vbogatyrev.v1.task2.models.Product; + +import java.util.List; + +public interface InternetShop { + + Order createOrder(Integer productId, String customer) throws Exception; + Order payment(Integer orderId) throws Exception; + Order returnProduct(Integer orderId) throws Exception; + Order modifOrder(Integer orderId, Integer productId) throws Exception; + List catalog(); +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/business/MyShop.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/business/MyShop.java new file mode 100644 index 00000000..42421391 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/business/MyShop.java @@ -0,0 +1,89 @@ +package ru.tn.courses.vbogatyrev.v1.task2.business; + +import ru.tn.courses.vbogatyrev.v1.task2.enums.OrderDescriptionEnum; +import ru.tn.courses.vbogatyrev.v1.task2.models.Customer; +import ru.tn.courses.vbogatyrev.v1.task2.models.Order; +import ru.tn.courses.vbogatyrev.v1.task2.models.Product; +import ru.tn.courses.vbogatyrev.v1.task2.repositories.CustomerRepository; +import ru.tn.courses.vbogatyrev.v1.task2.repositories.OrderRepository; +import ru.tn.courses.vbogatyrev.v1.task2.repositories.ProductRepository; + +import java.time.LocalDate; +import java.util.List; + +public class MyShop implements InternetShop { + OrderRepository orderRepository = OrderRepository.getInstance(); + ProductRepository productRepository = ProductRepository.getInstance(); + CustomerRepository customerRepository = CustomerRepository.getInstance(); + + @Override + public Order createOrder(Integer productId, String customerName) throws Exception { + Customer customer = customerRepository.findByName(customerName); + try { + Product product = productRepository.findById(productId); + Order order = + new Order(orderRepository.getSize(), customer, product, OrderDescriptionEnum.CREATE.getValue()); + orderRepository.save(order); + return order; + } catch (Exception e) { + throw new Exception("товар с таким id не найден"); + } + } + + @Override + public Order payment(Integer orderId) throws Exception { + try { + Order order = orderRepository.findById(orderId); + order.setDescription(OrderDescriptionEnum.BUY.getValue()); + Customer customer = customerRepository.findById(order.getCustomer().getId()); + Product product = productRepository.findById(order.getProduct().getId()); + if (product.getCount() > 0) { + product.setCount(product.getCount() - 1); + } else { + throw new Exception("товара больше нет"); + } + if (order.getProduct().getPrice() > customer.getMoney()) { + throw new Exception("на вашем счете недосаточного денег"); + } + productRepository.update(product, product.getId()); + order.setPayment(order.getProduct().getPrice()); + customer.setMoney(customer.getMoney() - order.getProduct().getPrice()); + customerRepository.update(customer, customer.getId()); + + return order; + } catch (IndexOutOfBoundsException e) { + throw new Exception("заказ с таким id не найден"); + } + } + + @Override + public Order returnProduct(Integer orderId) throws Exception { + try { + Order order = orderRepository.findById(orderId); + order.setDescription(OrderDescriptionEnum.RETURN.getValue()); + orderRepository.update(order, orderId); + return order; + } catch (Exception e) { + throw new Exception("заказа с таким id не найдено."); + } + } + + @Override + public Order modifOrder(Integer orderId, Integer newProductId) throws Exception { + try { + Product newProduct = productRepository.findById(newProductId); + Order order = orderRepository.findById(orderId); + order.setModified(LocalDate.now()); + order.setProduct(newProduct); + order.setDescription(OrderDescriptionEnum.MODIF.getValue()); + return order; + } catch (Exception e) { + throw new Exception("товар или заказ с таким id не найдено"); + } + } + + @Override + public List catalog() { + return productRepository.findAll(); + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/BrandEnum.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/BrandEnum.java new file mode 100644 index 00000000..53586c22 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/BrandEnum.java @@ -0,0 +1,16 @@ +package ru.tn.courses.vbogatyrev.v1.task2.enums; + +public enum BrandEnum { + AUDI("ауди"), VAZ("вишневая семерка"), BMW("бмв"); + + private final String value; + + BrandEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/ColorEnum.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/ColorEnum.java new file mode 100644 index 00000000..f434ef13 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/ColorEnum.java @@ -0,0 +1,15 @@ +package ru.tn.courses.vbogatyrev.v1.task2.enums; + +public enum ColorEnum{ + RED("красный"), GREEN("зеленый"), BLUE("синий"); + + private final String value; + + ColorEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/DriveEnum.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/DriveEnum.java new file mode 100644 index 00000000..a1aeb77f --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/DriveEnum.java @@ -0,0 +1,15 @@ +package ru.tn.courses.vbogatyrev.v1.task2.enums; + +public enum DriveEnum { + FULL("полный"), FRONT("передний"), REAR("задний"); + + private final String value; + + DriveEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/OrderDescriptionEnum.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/OrderDescriptionEnum.java new file mode 100644 index 00000000..77027032 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/OrderDescriptionEnum.java @@ -0,0 +1,15 @@ +package ru.tn.courses.vbogatyrev.v1.task2.enums; + +public enum OrderDescriptionEnum { + CREATE("Создание заказа"), RETURN("возврат продукта"), MODIF("изменение заказа"), BUY("произведена покупка"); + + private final String value; + + OrderDescriptionEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/TransmissionEnum.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/TransmissionEnum.java new file mode 100644 index 00000000..8cff2e65 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/enums/TransmissionEnum.java @@ -0,0 +1,17 @@ +package ru.tn.courses.vbogatyrev.v1.task2.enums; + +public enum TransmissionEnum { + + MANUAL("механическая"), AUTOMATIC("автоматическая"); + + private final String value; + + TransmissionEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Car.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Car.java new file mode 100644 index 00000000..3a906632 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Car.java @@ -0,0 +1,53 @@ +package ru.tn.courses.vbogatyrev.v1.task2.models; + +public class Car extends Product { + private String color; + private String brand; + private String transmission; + private String drive; + + public Car(Integer id, String color, String brand, double price, String transmission, String drive, int count) { + super(id, price, count); + this.color = color; + this.brand = brand; + this.transmission = transmission; + this.drive = drive; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + public String getBrand() { + return brand; + } + + public void setBrand(String brand) { + this.brand = brand; + } + + public String getTransmission() { + return transmission; + } + + public void setTransmission(String transmission) { + this.transmission = transmission; + } + + public String getDrive() { + return drive; + } + + public void setDrive(String drive) { + this.drive = drive; + } + + @Override + public String toString() { + return super.toString() + "; color : " + color + "; brand: " + brand + "; transmission: " + transmission + "; drive: " + drive + "\n"; + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Customer.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Customer.java new file mode 100644 index 00000000..0dfcf774 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Customer.java @@ -0,0 +1,33 @@ +package ru.tn.courses.vbogatyrev.v1.task2.models; + +public class Customer extends Model{ + String name; + Double money; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Double getMoney() { + return money; + } + + public void setMoney(Double money) { + this.money = money; + } + + public Customer(Integer id, String name, Double money) { + super(id); + this.name = name; + this.money = money; + } + + @Override + public String toString() { + return super.toString() + "; name: " + name + "; money: " + money + "\n"; + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Model.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Model.java new file mode 100644 index 00000000..b359d4c5 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Model.java @@ -0,0 +1,18 @@ +package ru.tn.courses.vbogatyrev.v1.task2.models; + +public class Model { + private Integer id; + + public Integer getId() { + return id; + } + + public Model(Integer id) { + this.id = id; + } + + @Override + public String toString() { + return "id: " + id; + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Order.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Order.java new file mode 100644 index 00000000..b359b264 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Order.java @@ -0,0 +1,73 @@ +package ru.tn.courses.vbogatyrev.v1.task2.models; + +import java.time.LocalDate; + +public class Order extends Model { + + private Customer customer; + private LocalDate created; + private LocalDate modified; + private Product product; + private String description; + private double payment; + + public double getPayment() { + return payment; + } + + public void setPayment(double payment) { + this.payment = payment; + } + + public Order(Integer id, Customer customer, Product product, String description) { + super(id); + this.customer = customer; + this.created = LocalDate.now(); + this.modified = LocalDate.now(); + this.product = product; + this.description = description; + } + + public Customer getCustomer() { + return customer; + } + + public Product getProduct() { + return product; + } + + + public void setProduct(Product product) { + this.product = product; + } + + public void setCustomer(Customer customer) { + this.customer = customer; + } + + public LocalDate getModified() { + return modified; + } + + public void setModified(LocalDate modified) { + this.modified = modified; + } + + public LocalDate getCreated() { + return created; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + @Override + public String toString() { + return super.toString() + "; customer: " + customer.name + "; created: " + created + "; product: {" + product + + "}; description: " + description + "\n"; + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Product.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Product.java new file mode 100644 index 00000000..f7ca5256 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/models/Product.java @@ -0,0 +1,33 @@ +package ru.tn.courses.vbogatyrev.v1.task2.models; + +public class Product extends Model{ + private double price; + private int count; + + public Product(Integer id, double price, int count) { + super(id); + this.price = price; + this.count = count; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + @Override + public String toString() { + return super.toString() + "; price: " + price + "; count: "+ count; + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/CustomerRepository.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/CustomerRepository.java new file mode 100644 index 00000000..293ebc90 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/CustomerRepository.java @@ -0,0 +1,33 @@ +package ru.tn.courses.vbogatyrev.v1.task2.repositories; + +import ru.tn.courses.vbogatyrev.v1.task2.models.Customer; + +import java.util.ArrayList; +import java.util.List; + +public class CustomerRepository extends RepositoryImpl { + + private static CustomerRepository instance; + + public static CustomerRepository getInstance() { + if (instance == null) { + instance = new CustomerRepository(); + } + return instance; + } + + public CustomerRepository() { + super(new ArrayList<>()); + save(new Customer(getSize(), "Валик", 10000.0)); + save(new Customer(getSize(), "Леха", 100.0)); + } + + public Customer findByName(String name) throws Exception { + List allCustomer = findAll(); + for (Customer customer : allCustomer) { + if (customer.getName().equals(name)) + return customer; + } + throw new Exception("Покупателя с таким именем не найдено."); + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/OrderRepository.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/OrderRepository.java new file mode 100644 index 00000000..043f818f --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/OrderRepository.java @@ -0,0 +1,21 @@ +package ru.tn.courses.vbogatyrev.v1.task2.repositories; + +import ru.tn.courses.vbogatyrev.v1.task2.models.Order; + +import java.util.ArrayList; + +public class OrderRepository extends RepositoryImpl { + + private static OrderRepository instance; + + public static OrderRepository getInstance(){ + if(instance == null){ + instance = new OrderRepository(); + } + return instance; + } + + public OrderRepository() { + super(new ArrayList<>()); + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/ProductRepository.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/ProductRepository.java new file mode 100644 index 00000000..22727330 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/ProductRepository.java @@ -0,0 +1,52 @@ +package ru.tn.courses.vbogatyrev.v1.task2.repositories; + +import ru.tn.courses.vbogatyrev.v1.task2.enums.BrandEnum; +import ru.tn.courses.vbogatyrev.v1.task2.enums.ColorEnum; +import ru.tn.courses.vbogatyrev.v1.task2.enums.DriveEnum; +import ru.tn.courses.vbogatyrev.v1.task2.enums.TransmissionEnum; +import ru.tn.courses.vbogatyrev.v1.task2.models.Car; +import ru.tn.courses.vbogatyrev.v1.task2.models.Product; + +import java.util.ArrayList; + +public class ProductRepository extends RepositoryImpl { + + private static ProductRepository instance; + public static ProductRepository getInstance(){ + if(instance == null){ + instance = new ProductRepository(); + } + return instance; + } + + private ProductRepository() { + super(new ArrayList<>()); + save( + new Car( + getSize(), + ColorEnum.BLUE.getValue(), + BrandEnum.VAZ.getValue(), + 1500, + TransmissionEnum.AUTOMATIC.getValue(), + DriveEnum.FRONT.getValue(), + 8)); + save( + new Car( + getSize(), + ColorEnum.GREEN.getValue(), + BrandEnum.AUDI.getValue(), + 1500, + TransmissionEnum.MANUAL.getValue(), + DriveEnum.REAR.getValue(), + 10)); + save( + new Car( + getSize(), + ColorEnum.BLUE.getValue(), + BrandEnum.BMW.getValue(), + 2000, + TransmissionEnum.AUTOMATIC.getValue(), + DriveEnum.FRONT.getValue(), + 15)); + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/Repository.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/Repository.java new file mode 100644 index 00000000..25d5f4c7 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/Repository.java @@ -0,0 +1,11 @@ +package ru.tn.courses.vbogatyrev.v1.task2.repositories; + +import java.util.List; + +public interface Repository { + List findAll(); + void save(T var); + void update(T var, Integer id); + T findById(Integer id); + Integer getSize(); +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/RepositoryImpl.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/RepositoryImpl.java new file mode 100644 index 00000000..3eb11a7e --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task2/repositories/RepositoryImpl.java @@ -0,0 +1,37 @@ +package ru.tn.courses.vbogatyrev.v1.task2.repositories; + +import java.util.List; + +public class RepositoryImpl implements Repository { + private List repository; + + public RepositoryImpl(List repository) { + this.repository = repository; + } + + @Override + public List findAll() { + return repository; + } + + @Override + public void save(T var) { + repository.add(var); + } + + @Override + public void update(T var, Integer id) { + repository.set(id, var); + } + + + @Override + public T findById(Integer id) { + return repository.get(id); + } + + @Override + public Integer getSize() { + return repository.size(); + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/Integer.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/Integer.java new file mode 100644 index 00000000..72fc8df9 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/Integer.java @@ -0,0 +1,144 @@ +package ru.tn.courses.vbogatyrev.v1.task3; + +public class Integer { + private final int value; + public final static int MAX_VALUE = 0x7fffffff; + public final static int MIN_VALUE = 0x80000000; + + public int getValue() { + return this.value; + } + + public Integer() { + this.value = 0; + } + + public Integer(int x) { + this.value = x; + } + + public Integer(String s) throws RuntimeException { + if (s == null) { + throw new RuntimeException(); + } + this.value = parseInt(s); + } + + private int parseInt(String s) throws RuntimeException { + int x = 0; + int f = 1; + byte[] bytes = s.getBytes(); + int i = 0; + if (bytes[i] == '-') { + i++; + f = -1; + } + + while (i < bytes.length) { + if (bytes[i] >= '0' && bytes[i] <= '9') { + if (((long) x * 10 + bytes[i] - '0') > MAX_VALUE) { + throw new RuntimeException("выход за границы"); + } + x = x * 10 + bytes[i++] - '0'; + } else { + throw new RuntimeException(); + } + } + return x * f; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + + public boolean equals(Object o) { + if (o instanceof Integer) { + return value == ((Integer) o).getValue(); + } + return false; + } + + public int hashCode() { + return this.value; + } + + public Integer add(Integer i) { + if (((long) this.value + i.getValue()) > MAX_VALUE) { + throw new RuntimeException("выход за пределы"); + } + return new Integer(this.value + i.getValue()); + } + + public Integer diff(Integer i) { + if (((long) this.value - i.getValue()) < MIN_VALUE) { + throw new RuntimeException("выход за пределы"); + } + return new Integer(this.value - i.getValue()); + } + + public Integer mult(Integer i) { + if (((long) this.value * i.getValue()) > MAX_VALUE) { + throw new RuntimeException("выход за пределы"); + } + return new Integer(this.value * i.getValue()); + } + + public Integer div(Integer i) { + if (i.getValue() == 0) { + throw new RuntimeException("на ноль делить нельзя..."); + } + return new Integer(this.value / i.getValue()); + } + + public Integer mod(Integer i) { + if (i.getValue() == 0) { + throw new RuntimeException("деление на ноль"); + } + return new Integer(this.value % i.getValue()); + } + + public Integer pow(int exponent) { + if (exponent == 1) { + return this; + } + + if (exponent == 0) { + return new Integer(1); + } + + int x = this.value; + for (int i = 1; i < exponent; i++) { + if (((long) x * value) > MAX_VALUE) { + throw new RuntimeException("выход за пределы"); + } + x *= value; + } + return new Integer(x); + } + + public String toOctalString() { + String s = ""; + int x = this.value; + while (x > 0) { + s = (char) ((x % 8) + '0') + s; + x /= 8; + } + return s; + } + + public String toHexString() { + String s = ""; + int x = this.value; + while (x > 0) { + if (x % 16 > 9) { + s = (char) ((x % 16) + 'A' - 10) + s; + } else { + s = (char) ((x % 16) + '0') + s; + } + x /= 16; + } + return s; + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/ListContainer.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/ListContainer.java new file mode 100644 index 00000000..20d49462 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/ListContainer.java @@ -0,0 +1,147 @@ +package ru.tn.courses.vbogatyrev.v1.task3; + +import java.util.Collection; + +public class ListContainer { + private T[] values; + private int size; + + public ListContainer() { + this.values = (T[]) new Object[10]; + this.size = 0; + } + + public ListContainer(T... values) { + this.values = (T[]) new Object[values.length]; + for (int i = 0; i < values.length; i++) { + this.add(values[i]); + } + } + + public T[] getValues() { + var list = (T[]) new Object[this.size]; + for (int i = 0; i < this.size; i++) { + list[i] = this.values[i]; + } + return list; + } + + public void add(T value) { + if (this.size < this.values.length) { + this.values[size++] = value; + } else { + T[] temp = (T[]) new Object[2 * size]; + for (int i = 0; i < size; i++) { + temp[i] = this.values[i]; + } + this.values = temp; + this.values[size++] = value; + } + } + + public void add(T value, int index) { + if (this.values.length >= this.size + 1) { + T[] temp = (T[]) new Object[2 * size]; + for (int i = 0; i < size; i++) { + temp[i] = (T) this.values[i]; + } + this.values = temp; + } + + for (int i = size; i > index; i--) { + this.values[i] = this.values[i - 1]; + } + if (index > size) { + add(value); + } else { + this.values[index] = value; + } + } + + public void remove(int index) { + if (index < this.size) { + for (int i = index; i <= this.size - 1; i++) { + this.values[i] = this.values[i + 1]; + } + size--; + } else { + throw new RuntimeException("за пределами массива"); + } + } + + public T get(int index) { + if (index <= size) { + return (T) this.values[index]; + } else { + throw new RuntimeException("за пределами массива"); + } + } + + public T get(T value) { + int i = 0; + while (i < size) { + if (value.equals(this.values[i])) { + return (T) this.values[i]; + } + i++; + } + return null; + } + + public boolean equals(final Object o) { + if (o == this) { + return true; + } + if (!(o instanceof ListContainer)) { + return false; + } + var listConteiners = (ListContainer) o; + for (int i = 0; i < size; i++) { + if (!listConteiners.values[i].equals(this.values[i])) { + return false; + } + } + return true; + } + + @Override + public int hashCode() { + int hash = 0; + for (int i = 0; i < size; i++) { + hash += 13 * hash + this.values[i].hashCode(); + } + return hash; + } + + public void addCollection(Collection collection) { + T[] collectionElements = (T[]) new Object[collection.size()]; + int i = 0; + for (T element : collection) { + collectionElements[i++] = element; + } + + for (i = 0; i < collectionElements.length; i++) { + add(collectionElements[i]); + } + } + + public int getSize() { + return this.size; + } + + public ListContainer getSubConteiner(int[] indexes) { + var listContainer = new ListContainer(); + for (int i = 0; i < indexes.length; i++) { + if (indexes[i] > size) { + throw new RuntimeException("индекс за пределами массива"); + } + listContainer.add(this.values[indexes[i]]); + } + return listContainer; + } + + public String toString() { + // это ток для себя, не использую arrays utils + return "(values=" + java.util.Arrays.deepToString(this.getValues()) + ", size=" + this.getSize() + ")"; + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/Subtask_1.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/Subtask_1.java new file mode 100644 index 00000000..4414e223 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/Subtask_1.java @@ -0,0 +1,21 @@ +package ru.tn.courses.vbogatyrev.v1.task3; + +public class Subtask_1 { + /** + * Разработать класс Integer + * - класс должен содержать конструкторы Integer(), Integer(int x), Integer(String s) + * - Реализовать метод сравнения двух объектов класса Integer + * - Реализовать методы добавления значения add(Integer i), вычитания, умножения и деления + * - Реализовать метод возведения в степень pow(int exponent) + * - реализовать методы преставления числа в восьмеричной и шестнадцатеричной СС + */ + + public static void main(String[] args) { + Integer a = new Integer(0); + Integer b = new Integer("-2"); + Integer c = b.pow(2); + System.out.println(c); + System.out.println(c.toOctalString()); + System.out.println(c.toHexString()); + } +} diff --git a/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/Subtask_2.java b/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/Subtask_2.java new file mode 100644 index 00000000..fcba6694 --- /dev/null +++ b/src/main/java/ru/tn/courses/vbogatyrev/v1/task3/Subtask_2.java @@ -0,0 +1,40 @@ +package ru.tn.courses.vbogatyrev.v1.task3; + +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.Collection; +import java.util.Set; +import java.util.stream.Stream; + +public class Subtask_2 { + /** + * Разработать класс ListContainer для хранения дженерик списков + *

+ * класс должен содержать конструктор по умолчанию и конструктор с new ListContainer(T ... elements) метод + * получения значения списка метод сравнения двух контейнеров методы добавления и удаления элемента в контейнер + * методы поиска элементов по индексу или значению добавление коллекции элементов получение контейнера с подсписком + * по индексам + */ + + public static void main(String[] args) { + ListContainer listContainer = new ListContainer<>(1, 2, 3); + listContainer.addCollection(Set.of(1, 2, 3)); + System.out.println(listContainer); + + listContainer.add(2); + System.out.println(listContainer); + + listContainer.add(4, 6); + System.out.println(listContainer); + + listContainer.remove(3); + System.out.println(listContainer); + +// Arrays.stream(listContainer.getValues()).forEach(System.out::println); + + System.out.println(listContainer.get(3)); + + var listContainer2 = listContainer.getSubConteiner(new int[]{1,2,3}); + System.out.println(listContainer2); + } +}