Compare commits

..

28 Commits

Author SHA1 Message Date
lesflq
1c89c9da01 Merge branch 'ІО-24/25-Севастьянов-Максим-Євгенович' of github.com:ASDjonok/OOP_IO-2x_2023 into ІО-24/25-Севастьянов-Максим-Євгенович 2023-06-03 18:54:52 +03:00
lesflq
a34d7aa388 Added 6 lab 2023-06-03 18:43:05 +03:00
lesflq
55bfc1cca6 Delete test.txt 2023-05-31 20:24:24 +03:00
lesflq
48dad5cd9e Merge branch 'ІО-24/25-Севастьянов-Максим-Євгенович' of github.com:ASDjonok/OOP_IO-2x_2023 into ІО-24/25-Севастьянов-Максим-Євгенович 2023-05-31 20:22:50 +03:00
lesflq
f1131c280f Delete lab1 directory 2023-05-31 20:20:04 +03:00
lesflq
20be64e175 Added 5 lab 2023-05-31 20:18:40 +03:00
Oleksii Aleshchenko
1583e33ab3 update lab4 2023-05-25 16:04:54 +03:00
Oleksii Aleshchenko
277f8f82f6 update lab4 2023-05-25 15:06:01 +03:00
Oleksii Aleshchenko
eb2ffae473 update lab4 2023-05-18 16:03:31 +03:00
Oleksii Aleshchenko
f05125e298 Merge pull request #3 from Dymik739/commit-fix
Lab2: remove duplicate string to fix calculations
2023-05-11 16:12:29 +03:00
Oleksii Aleshchenko
ce73ebf1f5 update lab4 2023-05-11 16:10:42 +03:00
Oleksii Aleshchenko
31c3b96018 update Variant0.java 2023-05-11 15:46:43 +03:00
4eecffe040 Merge branch 'master' into commit-fix 2023-05-04 18:06:15 +03:00
Oleksii Aleshchenko
f7b11d9444 add Variant0.java for lab3 2023-05-04 15:59:21 +03:00
Oleksii Aleshchenko
bfdfd65153 add text for regex search 2023-05-04 15:29:07 +03:00
ae042010a6 remove duplicate string to fix calculations 2023-05-02 18:48:21 +03:00
Oleksii Aleshchenko
9b871b6a42 Merge remote-tracking branch 'origin/master' 2023-04-27 16:08:25 +03:00
Oleksii Aleshchenko
e41e64369b add test polymorphism example 2023-04-27 16:08:09 +03:00
Oleksii Aleshchenko
484bef389b upd lab3 2023-04-27 15:57:01 +03:00
455c991edb Випадково закомітив не туди) Все повернув 2023-04-17 21:00:20 +03:00
90d0f042a1 test 2023-04-17 20:59:13 +03:00
Oleksii Aleshchenko
1690d0f9e4 upd lab3 // add todo for lab4 2023-04-13 16:07:52 +03:00
Oleksii Aleshchenko
4531049ff2 add lab3 2023-04-06 16:07:04 +03:00
Oleksii Aleshchenko
07b17ca3cc upd lab2 (remove todo) 2023-04-06 15:34:29 +03:00
Oleksii Aleshchenko
a61c59bf48 upd lab2 2023-04-06 15:34:03 +03:00
Oleksii Aleshchenko
9ece98fece upd lab2 2023-04-06 15:04:51 +03:00
lesflq
788fa03eda Add files via upload 2023-03-08 10:03:09 +02:00
lesflq
b25ceea45d Add files via upload 2023-02-26 13:15:56 +02:00
14 changed files with 360 additions and 932 deletions

2
.idea/misc.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="openjdk-18" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_X" default="true" project-jdk-name="openjdk-20" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

11
lab2.iml Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -1,140 +0,0 @@
package Lab1;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Lab1 {
public static void main(String[] args) {
int C2, C3, C5, C7; // creating variables
int numBook = 2401; // default value of scorebook
Scanner sc = new Scanner(System.in); // scanner creating for inputing values from keyboard
System.out.println("By default number of scorebook is 2401. \nEnter to skip or input new value: ");
String input = sc.nextLine();
if (!input.equals("")) { // try-catch for checking correct inputing of value
try {
numBook = Math.abs(Integer.parseInt(input)); // scorebook can be only unsigned
} catch (NumberFormatException e) {
System.out.println("Invalid input. Using default value 2401"); // printing that will be used default value
}
}
String[] operations1 = {"+", "-"};//
String[] operations2 = {"*", "/", "%", "+", "-"}; // String array for choosing operations
String[] operations3 = {"byte", "short", "int", "long", "char", "float", "double"}; //
// determining variables
C2 = numBook % 2;
C3 = numBook % 3;
C5 = numBook % 5;
C7 = numBook % 7;
String O1 = operations1[C2];
int C = C3;
String O2 = operations2[C5];
String O3 = operations3[C7];
System.out.println("C2 is: " + C2 + ", operation is: " + O1); //
System.out.println("C3 is: " + C); // printing parameters that user got
System.out.println("C5 is: " + C5 + ", operation is: " + O2); //
System.out.println("C7 is: " + C7 + ", Type of indexes i and j is: " + O3); //
Number i = 0; // creating objects i j of (abstract)superclass Number
Number j = 0; //
System.out.println("\nEnter a value for i and j in the " + O3 + " type: ");
switch (O3) { // Choosing type of i and j by C7
case "byte" -> {
try {
i = sc.nextByte();
j = sc.nextByte();
} catch (InputMismatchException e) {
System.out.println("Invalid input. Please enter a valid byte value.");
sc.nextLine();
}
}
case "short" -> {
i = sc.nextShort();
j = sc.nextShort();
}
case "int" -> {
i = sc.nextInt();
j = sc.nextInt();
}
case "long" -> {
i = sc.nextLong();
j = sc.nextLong();
}
case "char" -> {
System.out.println("Read only first character!");
i = (int) sc.next().charAt(0);
j = (int) sc.next().charAt(0);
}
case "float" -> {
i = sc.nextFloat();
j = sc.nextFloat();
}
case "double" -> {
i = sc.nextDouble();
j = sc.nextDouble();
}
}
System.out.println("The value of the created variables is: " + i + " and " + j);
class Sum { // creating class Sum
int n, m;
double i, j;
public Sum(double i, double j, int n, int m) { // Constructor to initialize all variables
this.i = i;
this.j = j;
this.n = n;
this.m = m;
}
public void calc() { // create method for our class
double sum = 0, result = 0, result2 = 0;
if ((O1.equals("-") && i + n >= C && i <= C) || (C == 0 && i == 0)) { // exclude situations
System.out.println("dividing by zero!"); // with dividing by 0
} else if (i > n || j > m) {
System.out.println("i or j greater than n or m");
} else {
for (double b = i; b <= n; b++) {
for (double a = j; a <= m; a++) {
switch (O2) {
case "+" -> result = b + a;
case "-" -> result = b - a;
case "*" -> result = b * a;
case "/" -> result = b / a;
case "%" -> result = b % a;
}
switch (O1) {
case "+" -> result2 = b + C;
case "-" -> result2 = b - C;
}
sum += result / result2;
}
}
System.out.println("Sum is: " + sum);
}
}
}
System.out.print("Enter value for n and m: \n");
int n = sc.nextInt();
int m = sc.nextInt();
Sum sum = new Sum(i.doubleValue(), j.doubleValue(), n, m); // creating new instance of Sum class
// .doubleValue() converting our variables to double
sum.calc();
sc.close();
}
}

View File

@@ -1,153 +0,0 @@
package Lab2;
import java.util.Scanner;
import java.util.Random;
public class Lab2 {
public static void main(String[] args) {
final int C5, C7, C11, NumBook;
NumBook = 2401;
C5 = NumBook % 5;
C7 = NumBook % 7;
C11 = NumBook % 11;
System.out.println("-----------------------------------------------------");
System.out.println("C5 is: " + C5 + " - act with martix is C=Bт");
System.out.println("C7 is: " + C7 + " - type of elements is double");
System.out.println("C11 is: " + C11 + " - calculate the sum of the largest elements\n" +
"of each row of the matrix");
System.out.println("-----------------------------------------------------");
int Mside = 0;
int Nside = 0;
int Choose;
double MaxSum = 0;
Random rand = new Random();
Scanner sc = new Scanner(System.in);
while (true) {
try {
System.out.print("Enter random or handle input(1 or 0): ");
Choose = Math.abs(Integer.parseInt(sc.nextLine()));
if (Choose == 1 || Choose == 0) {
break;
}
} catch (NumberFormatException e) {
System.out.println("Invalid input. Please enter an integer.");
}
}
while (true) {
try {
System.out.print("Enter number of rows: ");
Mside = Math.abs(Integer.parseInt(sc.nextLine()));
if (Mside <= 0) {
System.out.println("Invalid input. Number of rows must be greater than 0");
} else {
break;
}
} catch (NumberFormatException e) {
System.out.println("Invalid input. Please enter an integer.");
}
}
while (true) {
try {
System.out.print("Enter number of columns: ");
Nside = Math.abs(Integer.parseInt(sc.nextLine()));
if (Nside <= 0) {
System.out.println("Invalid input. Number of columns must be greater than 0");
} else {
break;
}
} catch (NumberFormatException e) {
System.out.println("Invalid input. Please enter an integer.");
}
}
final int lenghtMaxElements = 5;
double[][] CArray = new double[Mside][Nside];
double[][] TransposedArray = new double[Nside][Mside];
double[][] MaxElements = new double[Nside][lenghtMaxElements];
if (Choose == 1) {
for (int i = 0; i < Mside; i++) {
for (int j = 0; j < Nside; j++) {
CArray[i][j] = rand.nextDouble(-100, 100);
}
}
}
if (Choose == 0) {
for (int i = 0; i < Mside; i++) {
for (int j = 0; j < Nside; j++) {
while (true) {
try {
System.out.printf("Enter the element at position (%d,%d): ", i + 1, j + 1);
CArray[i][j] = Double.parseDouble(sc.nextLine());
break;
} catch (NumberFormatException e) {
System.out.println("Invalid input. Please enter a valid number.");
}
}
}
}
}
for (int i = 0; i < Mside; i++) {
for (int j = 0; j < Nside; j++) {
System.out.printf("%8.2f", CArray[i][j]);
}
System.out.println();
}
for (int i = 0; i < Nside; i++) {
for (int j = 0; j < Mside; j++) {
TransposedArray[i][j] = CArray[j][i];
}
}
System.out.println("Transposed array is:");
int row, cols;
for (row = 0; row < Nside; row++) {
for (cols = 0; cols < Mside; cols++) {
System.out.printf("%8.2f", TransposedArray[row][cols]);
}
System.out.println();
}
for (int i = 0; i < Nside; i++) {
MaxElements[i][0] = TransposedArray[i][0];
for (int j = 1; j < Mside; j++) {
MaxElements[i][1] = i;
if (TransposedArray[i][j] > MaxElements[i][0]) {
MaxElements[i][0] = TransposedArray[i][j];
MaxElements[i][2] = j;
} else if (TransposedArray[i][j] == MaxElements[i][0]) {
MaxElements[i][3] = MaxElements[i][0];
MaxElements[i][4] = 1;
}
}
//System.out.println(MaxElements[i][0] +" "+ MaxElements[i][1] +" "+ MaxElements[i][2] + " " + MaxElements[i][3] + " " + MaxElements[i][4]);
//code i used for debug
}
System.out.println("Max elements for each row:");
if (Mside == 1) {
System.out.println("I can`t find max element for mx1 matrix");
} else {
for (int i = 0; i < Nside; i++) {
if (MaxElements[i][0] == MaxElements[i][3] && MaxElements[i][4] == 1) {
System.out.printf("In row %1.0f does not exist a max element\n", MaxElements[i][1] + 1);
} else {
System.out.printf("%8.2f is max value and his coordinate: (%1.0f, %1.0f)\n", MaxElements[i][0], MaxElements[i][1] + 1, MaxElements[i][2] + 1);
MaxSum += MaxElements[i][0];
}
}
System.out.printf("Sum of elements with max values is: %.2f\n", MaxSum);
}
}
}

View File

@@ -1,73 +0,0 @@
package Lab3;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
public class Lab3 {
public static void main(String[] args) {
System.out.println("Введіть текст:");
Scanner scan = new Scanner(System.in); // Створюємо об'єкт Scanner для зчитування введеного тексту з консолі
String inputText = scan.nextLine(); // Зчитуємо введений текст користувача
StringBuffer textBuffer = new StringBuffer(inputText); // Створюємо відподні об'єкти StringBuffer
StringBuffer result = new StringBuffer();
while (!textBuffer.isEmpty()) { // Починаємо цикл, який виконується, доки об'єкт textBuffer не стане порожнім
int index1 = textBuffer.indexOf("."); // Знаходимо індекси для символів, які закінчують речення
int index2 = textBuffer.indexOf("!");
int index3 = textBuffer.indexOf("?");
int index4 = textBuffer.indexOf("...");
int[] SplitIndexArray = {index1, index2, index3, index4};
ArrayList<Integer> list = new ArrayList<>();
for (int j : SplitIndexArray) { // Перебираємо кожну позицію з масиву
if (j >= 0) { // Якщо символ не стоїть перед реченням, додаємо його
list.add(j);
}
}
int min = Collections.min(list); // Знаходимо мінімальну позицію, щоб працювати з першим реченням
String sentenceString = textBuffer.substring(0, min); // Виділяємо перше речення до знайденого розділового знаку
StringBuffer sentence = new StringBuffer(sentenceString); // Створюємо об'єкт StringBuffer для речення з пробілом
if (sentenceString.contains(" ")) { // Перевіряємо, чи перше речення містить більше одного слова
String firstword1;
String secondword1 = textBuffer.substring(sentence.lastIndexOf(" ") + 1, sentence.length()); // Виділяємо друге слово з речення
String secondword2;
secondword2 = secondword1.substring(0, 1).toUpperCase() + secondword1.substring(1, secondword1.length()); // Першу літеру робимо великою, решту слова копіюємо
StringBuffer secondword = new StringBuffer(secondword2);
if (sentence.charAt(sentence.indexOf(" ") - 1) == ',') { // Перевіряємо, чи перед першим словом є кома
firstword1 = textBuffer.substring(0, sentence.indexOf(" ") - 1); // Виділяємо перше слово з речення
secondword.append(","); // Додаємо кому до другого слова
} else {
firstword1 = textBuffer.substring(0, sentence.indexOf(" ")); // Виділяємо перше слово з речення
}
String firstword2 = firstword1.substring(0, 1).toLowerCase() + firstword1.substring(1, firstword1.length()); // Перетворюємо першу літеру першого слова малою
StringBuffer firstword = new StringBuffer(firstword2);
firstword.insert(0, " "); // Додаємо пробіл перед першим словом
sentence.delete(0, sentence.indexOf(" ")); // Видаляємо перше слово з речення
sentence.insert(0, secondword); // Додаємо друге слово на початок речення
sentence.delete(sentence.lastIndexOf(" "), sentence.length()); // Видаляємо останнє слово з речення
sentence.append(firstword); // Додаємо перше слово в кінець речення
}
if ((index1 == index4) && (index1 == min)) { // Перевіряємо випадок, коли речення закінчується на "..."
sentence.append(textBuffer.substring(min, min + 3)); // Додаємо "..." до речення
textBuffer.delete(0, min + 4); // видаляємо з textBuffer
} else {
sentence.append(textBuffer.substring(min, min + 1)); // Додаємо '.' до речення
textBuffer.delete(0, min + 2); // видаляємо з textBuffer
}
sentence.append(" "); // Додаємо пробіл
result.append(sentence); // Додаємо речення до результату
}
System.out.println(result);
}
}

View File

@@ -1,118 +0,0 @@
package Lab4;
import java.util.Comparator;
public class Airplane {
private int number; // Номер літака
private String model; // Модель літака
private String airline; // Компанія-власник
private int capacity; // Ємність для пасажирів
private double fuelCapacity; // Ємність палива
private boolean isFlying; // Стан літака: летить/в ангарі
// Конструктор класа
public Airplane(int number, String model, String airline, int capacity, double fuelCapacity) {
this.number = number;
this.model = model;
this.airline = airline;
this.capacity = capacity;
this.fuelCapacity = fuelCapacity;
this.isFlying = false;
}
// Методи доступу, а саме геттери
public int getNumber() {
return number;
}
public String getModel() {
return model;
}
public String getAirline() {
return airline;
}
public int getCapacity() {
return capacity;
}
public double getFuelCapacity() {
return fuelCapacity;
}
public boolean isFlying() {
return isFlying;
}
public void setFlying(boolean flying) {
isFlying = flying;
}
// Метод для запускання літака
public void takeOff() {
if (isFlying) { // Перевірка, якщо літає, то його знову не запустити,
// у мому коді до цього уже є перевірка, але якщо наприклад розришяти
// для інших програм, де перевірки не буде, то воно збереже від помилки
System.out.println("The airplane is already flying.");
} else {
System.out.println("Taking off...");
// Виводимо інформацію про взліт літака, міняємо прапор на 'true'
isFlying = true;
System.out.println("Airplane " + number + " took off!");
}
}
// Метод для посадки літака
public void land() {
if (!isFlying) { // та сама перевірка, тільки для посадки
System.out.println("The airplane is already on the ground.");
} else {
// садимо літак, пасажири плескають в долоні, а прапор 'false'
System.out.println("Landing...");
isFlying = false;
System.out.println("Airplane number " + number + " landed!");
System.out.println("Passengers: *claps*");
}
}
// Перевизначений метод toString для виведення інформації про літак у зручному форматі
@Override
public String toString() {
String flying = "In angar";
if (isFlying) {
flying = "Flying"; // друкувати стан прапора було би не естетично, тому перевіряємо 'true' - Flying
}
return String.format("%-7d | %-25s | %-10s | %-8d | %-12.1f | %-10s",
number, model, airline, capacity, fuelCapacity, flying); // використовуємо метод .format для зручного виведення
}
}
// Клас, що реалізує інтерфейс Comparator для порівняння літаків за номером
class SortByNumber implements Comparator<Airplane> {
public int compare(Airplane a, Airplane b) {
return a.getNumber() - b.getNumber();
}
}
// Клас, що реалізує інтерфейс Comparator для порівняння літаків за моделлю
class SortByModel implements Comparator<Airplane> {
public int compare(Airplane a, Airplane b) {
return a.getModel().compareTo(b.getModel()); // Для типу String використовуємо метод compareTo
}
}
// Клас, що реалізує інтерфейс Comparator для порівняння літаків за ємністю
class SortByCapacity implements Comparator<Airplane> {
public int compare(Airplane a, Airplane b) {
return a.getCapacity() - b.getCapacity();
}
}
// Клас, що реалізує інтерфейс Comparator для порівняння літаків за ємністю палива
class SortByFuelCapacity implements Comparator<Airplane> {
public int compare(Airplane a, Airplane b) {
return Double.compare(a.getFuelCapacity(), b.getFuelCapacity()); // Для типу double застосовуємо відповідний метод
// з абстрактного класу Double
}
}

View File

@@ -1,101 +0,0 @@
package Lab4;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Lab4 {
int C11 = 2401 % 11; // 3 - Визначити клас літак, який складається як мінімум з 5-и полів.
public static void main(String[] args) {
Airplane[] airplanes = { // Створюємо масив літаків, можливості створити літак, який одразує літає неможливо,
// що логічно
new Airplane(1, "Boeing 747", "Airline 1", 20, 50000.0),
new Airplane(2, "Airbus A320", "Airline 1", 300, 3000.0),
new Airplane(3, "Embraer E190", "Airline 2", 1700, 2000.0),
new Airplane(4, "Cessna 172", "Airline 3", 400, 1500.0),
new Airplane(5, "Bombardier Global 6000", "Airline 1", 100, 800.0),
};
Scanner scanner = new Scanner(System.in); // Підключаємо Scanner
boolean quit = false;
while (!quit) { // Нескінченний цикл поки користувач не введе 'q'
System.out.print("\nEnter the field to sort by (number, model, capacity, fuelcapacity), 'fly' to fly airplane or enter 'q' to exit: ");
String input = scanner.nextLine();
// перевірка чи правильно введено слово
if (!input.equals("number") && !input.equals("model") && !input.equals("capacity") && !input.equals("fuelcapacity") && !input.equals("q") && !input.equals("fly")) {
System.out.println("Invalid field to sort by! Please enter 'number', 'model', 'capacity', 'fuelcapacity'.");
continue;
}
// перевірка виходу з програми
if (input.equals("q")) {
quit = true;
System.out.println("Closing program...");
continue;
}
// перевірка, чи користувач хоче запустити літак
if (input.equals("fly")){
buildBoard(airplanes); // виводимо таблицю літаків, через функцію buildBoard
System.out.print("Enter the airplane number to make it fly or land if it already fly: ");
int airplaneNumber = scanner.nextInt();
scanner.nextLine();
// Знаходимо вибраний літак
Airplane selectedAirplane = null;
for (Airplane airplane : airplanes) {
if (airplane.getNumber() == airplaneNumber) {
selectedAirplane = airplane;
break;
}
}
// перевірка, якщо літає - садимо на землю, якщо в ангарі, то запускаємо в повітр'я
if (selectedAirplane != null) {
if (selectedAirplane.isFlying()) {
selectedAirplane.land(); // викликаємо метод для посадки
} else {
selectedAirplane.takeOff(); // викликаємо метод для запуску
}
} else {
System.out.println("No airplane found with the specified number.");
}
continue;
}
String field = input;
System.out.print("Enter the sort order (asc or desc): "); // вибір користувачем сортування за спаданням
String order = scanner.nextLine(); // чи зростанням
if (!order.equals("asc") && !order.equals("desc")) { // перевірка чи правильно введено символ
System.out.println("Invalid sort order! Please enter 'asc' or 'desc'.");
continue;
}
// "потужний" swtich
Comparator<Airplane> comparator = switch (field) { // в залежності від введеного слова - певний метод сортування
case "number" -> new SortByNumber();
case "model" -> new SortByModel();
case "capacity" -> new SortByCapacity();
case "fuelcapacity" -> new SortByFuelCapacity();
default -> null;
};
if (order.equals("desc")) { // інвертуємо для зворотнього порядку
comparator = comparator.reversed();
}
Arrays.sort(airplanes, comparator); // сортуємо літаки за результатами компоратора
System.out.println("\nSorted by " + field + " (in " + order + "ending order):");
buildBoard(airplanes); // виклик функції buildBoard
}
}
public static void buildBoard(Airplane[] airplanes){ // Функція нічого не повертає, приймає на вхід масив літаків
System.out.println(String.format("%n%-7s | %-25s | %-10s | %-6s | %12s | %-10s", "Number", "Model", "Airline", "Capacity", "Fuel Capcity", "Is flying"));
System.out.println("---------------------------------------------------------------------------------------");
for (Airplane airplane : airplanes) { // "потужний" цикл for, щоб зручно перебрати літаки
System.out.println(airplane.toString()); // викликаємо метод toSring(), який є прикладом поліморфізму
}
}
}

231
src/Lab5.java Normal file
View File

@@ -0,0 +1,231 @@
import java.util.ArrayList;
import java.util.List;
class Letter {
private char character;
public Letter(char character) {
this.character = character;
}
public char getCharacter() {
return character;
}
@Override
public String toString() {
return String.valueOf(character);
}
}
class Word {
private List<Letter> letters;
public Word(List<Letter> letters) {
this.letters = letters;
}
public List<Letter> getLetters() {
return letters;
}
@Override
public String toString() {
StringBuilder wordBuilder = new StringBuilder();
for (Letter letter : letters) {
wordBuilder.append(letter.getCharacter());
}
return wordBuilder.toString();
}
}
class Sentence {
private List<Object> components;
public Sentence(List<Object> components) {
this.components = components;
}
public List<Object> getComponents() {
return components;
}
@Override
public String toString() {
StringBuilder sentenceBuilder = new StringBuilder();
for (Object component : components) {
if (component instanceof Word) {
List<Letter> letters = ((Word) component).getLetters();
for (Letter letter : letters) {
sentenceBuilder.append(letter.getCharacter());
}
} else if (component instanceof PunctuationMark) {
sentenceBuilder.append(((PunctuationMark) component).getMark());
}
sentenceBuilder.append(" ");
}
return sentenceBuilder.toString().trim();
}
}
class PunctuationMark {
private char mark;
public PunctuationMark(char mark) {
this.mark = mark;
}
public char getMark() {
return mark;
}
@Override
public String toString() {
return String.valueOf(mark);
}
}
class Text {
private List<Sentence> sentences;
public Text(List<Sentence> sentences) {
this.sentences = sentences;
}
public List<Sentence> getSentences() {
return sentences;
}
@Override
public String toString() {
StringBuilder textBuilder = new StringBuilder();
for (Sentence sentence : sentences) {
textBuilder.append(sentence.toString()).append(". ");
}
return textBuilder.toString().trim();
}
}
public class Lab5 {
public static void main(String[] args) {
System.out.println("C17 = " + 2425%17);
StringBuffer sentence = new StringBuffer("об'єктно-орієнтована мова програмування , випущена 1995 року компанією" +
" Сан Майкросістемс , як основний компонент платформи Джава." +
" З 2009 року мовою займається компанія Оракл , яка того року придбала Сан Майкросістемс. В офіційній" +
" реалізації Джава-програми компілюються у байт-код , який при виконанні інтерпретується віртуальною" +
" машиною для конкретної платформи");
// Заміна послідовності табуляцій та пробілів одним пробілом
String cleanedText = replaceTabsAndSpaces(sentence.toString());
// Розбиття тексту на речення
String[] sentenceArray = cleanedText.split("\\.");
List<Sentence> sentences = new ArrayList<>();
List<Character> punctuationMarks = new ArrayList<>();
for (String s : sentenceArray) {
// Розбиття речення на слова та розділові знаки
String[] components = s.trim().split("\\s+");
List<Object> sentenceComponents = new ArrayList<>();
for (String component : components) {
if (isPunctuationMark(component)) {
// Додавання розділових знаків
char mark = component.charAt(component.length() - 1);
punctuationMarks.add(mark);
sentenceComponents.add(new PunctuationMark(mark));
} else {
// Створення слова
List<Letter> letters = new ArrayList<>();
for (char c : component.toCharArray()) {
letters.add(new Letter(c));
}
sentenceComponents.add(new Word(letters));
}
}
sentences.add(new Sentence(sentenceComponents));
}
// Створення тексту
Text text = new Text(sentences);
// Виведення букв, слів та речень
List<Sentence> allSentences = text.getSentences();
for (Sentence s : allSentences) {
List<Object> components = s.getComponents();
for (Object component : components) {
if (component instanceof Word) {
System.out.println("Слово: " + component);
List<Letter> letters = ((Word) component).getLetters();
for (Letter letter : letters) {
System.out.println("Літера: " + letter.getCharacter());
}
} else if (component instanceof PunctuationMark) {
System.out.println("Розділовий знак: " + ((PunctuationMark) component).getMark());
}
}
System.out.println("Речення: " + s.toString());
System.out.println();
}
// Виведення розділових знаків
System.out.println("Розділові знаки:");
for (Character mark : punctuationMarks) {
System.out.println(mark);
}
// Виведення масиву речень з пробілами
System.out.println("Масив речень:");
for (Sentence s : allSentences) {
System.out.println(s.toString());
}
// Видалення слів заданої довжини, починаючи з приголосної літери
removeWords(allSentences);
// Виведення оновленого тексту
System.out.println("Оновлений текст:");
System.out.println(text.toString());
}
// Функція для заміни табуляцій та пробілів одним пробілом
private static String replaceTabsAndSpaces(String text) {
return text.replaceAll("\\s+", " ");
}
// Функція для перевірки, чи є рядок розділовим знаком
private static boolean isPunctuationMark(String text) {
return text.matches(".*[,.]$");
}
// Функція для видалення слів заданої довжини, починаючи з приголосної літери
private static void removeWords(List<Sentence> sentences) {
String consonants = "бвгґджзклмнпрстфхцчшщ";
for (Sentence sentence : sentences) {
List<Object> components = sentence.getComponents();
List<Object> componentsToRemove = new ArrayList<>();
for (Object component : components) {
if (component instanceof Word) {
Word word = (Word) component;
List<Letter> letters = word.getLetters();
int wordLength = letters.size();
char firstLetter = letters.get(0).getCharacter();
if ((wordLength > 5) && (wordLength < 9) && consonants.contains(String.valueOf(firstLetter))) {
componentsToRemove.add(component);
}
}
}
components.removeAll(componentsToRemove);
}
}
}

117
src/Lab6.java Normal file
View File

@@ -0,0 +1,117 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
class Train {
private List<PassengerCarriage> carriages;
public Train(List<PassengerCarriage> carriages) {
this.carriages = carriages;
}
public int getTotalPassengerCount() {
int totalPassengerCount = 0;
for (PassengerCarriage carriage : carriages) {
totalPassengerCount += carriage.getPassengerCount();
}
return totalPassengerCount;
}
public int getTotalLuggageCount() {
int totalLuggageCount = 0;
for (PassengerCarriage carriage : carriages) {
totalLuggageCount += carriage.getLuggageCount();
}
return totalLuggageCount;
}
public void sortCarriagesByComfortLevel() {
Collections.sort(carriages, new Comparator<PassengerCarriage>() {
@Override
public int compare(PassengerCarriage c1, PassengerCarriage c2) {
return c1.getComfortLevel() - c2.getComfortLevel();
}
});
}
public PassengerCarriage findCarriageByPassengerCount(int minPassengers, int maxPassengers) {
for (PassengerCarriage carriage : carriages) {
int passengerCount = carriage.getPassengerCount();
if (passengerCount >= minPassengers && passengerCount <= maxPassengers) {
return carriage;
}
}
return null;
}
}
class PassengerCarriage {
private int passengerCount;
private int luggageCount;
private int comfortLevel;
public PassengerCarriage(int passengerCount, int luggageCount, int comfortLevel) {
this.passengerCount = passengerCount;
this.luggageCount = luggageCount;
this.comfortLevel = comfortLevel;
}
public int getPassengerCount() {
return passengerCount;
}
public int getLuggageCount() {
return luggageCount;
}
public int getComfortLevel() {
return comfortLevel;
}
}
public class Lab6 {
public static void main(String[] args) {
// Задаємо характеристики вагонів
List<PassengerCarriage> carriages = new ArrayList<>();
carriages.add(new PassengerCarriage(30, 64, 3));
carriages.add(new PassengerCarriage(53, 126, 2));
carriages.add(new PassengerCarriage(89, 164, 1));
Train train = new Train(carriages);
int totalPassengerCount = train.getTotalPassengerCount();
int totalLuggageCount = train.getTotalLuggageCount();
System.out.println("Кількість всіх пасажирів: " + totalPassengerCount);
System.out.println("Кількість всього багажу: " + totalLuggageCount);
train.sortCarriagesByComfortLevel();
System.out.println("Вагони відсортовані за рівнем комфорту:");
for (PassengerCarriage carriage : carriages) {
System.out.println("Кількість пасажирів: " + carriage.getPassengerCount() +
", Рівень комфорту: " + carriage.getComfortLevel());
}
Scanner scanner = new Scanner(System.in);
System.out.print("Введіть мінімальну кількість пасажирів: ");
int minPassengers = scanner.nextInt();
System.out.print("Введіть максимальну кількість пасажирів: ");
int maxPassengers = scanner.nextInt();
PassengerCarriage carriage = train.findCarriageByPassengerCount(minPassengers, maxPassengers);
if (carriage != null) {
System.out.println("Вагон знайдений за кількість пасажирів між " +
minPassengers + " та " + maxPassengers);
System.out.println("Кількість пасажирів: " + carriage.getPassengerCount() +
", Рівень комфорту: " + carriage.getComfortLevel());
} else {
System.out.println("Вагон не знайдений за кількістю пасажирів " +
minPassengers + " між " + maxPassengers);
}
}
}

View File

@@ -1,97 +0,0 @@
package Lab6;
import java.util.Comparator;
/**
* Абстрактний клас Car представляє основні властивості автомобіля
* Він містить конструктор для ініціалізації властивостей автомобіля,
* а також методи доступу до цих властивостей.
*/
public abstract class Car {
private final String make; // Марка автомобіля
private final String model; // Модель автомобіля
private final int year; // Рік випуску автомобіля
private final int price; // Ціна автомобіля
private final int speed; // Швидкість автомобіля
private final double fuelConsumption;// Споживання палива автомобілем
/**
* Конструктор класу Car ініціалізує властивості автомобіля.
*
* @param make марка автомобіля
* @param model модель автомобіля
* @param year рік випуску автомобіля
* @param price ціна автомобіля
* @param speed швидкість автомобіля
* @param fuelConsumption споживання палива автомобілем
*/
public Car(String make, String model, int year, int price, int speed, double fuelConsumption) {
this.make = make;
this.model = model;
this.year = year;
this.price = price;
this.speed = speed;
this.fuelConsumption = fuelConsumption;
}
// Звичайні геттери, тому їх сильно не розписував
public String getMake() {
return make;
}
public String getModel() {
return model;
}
public int getYear() {
return year;
}
public int getPrice() {
return price;
}
public int getSpeed() {
return speed;
}
public double getFuelConsumption() {
return fuelConsumption;
}
/**
* Перезаписаний метод toString для представлення об'єкту автомобіля у вигляді рядка.
*
* @return рядок, що містить всі властивості абстрактного автомобіля
*/
@Override
public String toString() {
return String.format("%-10s | %-7s | %-6s | %-6d | %-5d | %-5s | ",
make, model, year, price, speed, fuelConsumption);
}
}
/**
* Клас SortByFuelConsuming реалізує інтерфейс Comparator і використовується для порівняння автомобілів
* за споживанням палива.
*/
class SortByFuelConsuming implements Comparator<Car> {
/**
* Метод compare порівнює два об'єкти Car за споживанням палива.
* Він порівнює значення споживання палива для обох автомобілів.
*
* @param a перший автомобіль
* @param b другий автомобіль
* @return -1, 0 або 1, якщо перше значення менше, рівне або більше другого відповідно
*/
public int compare(Car a, Car b) {
return Double.compare(a.getFuelConsumption(), b.getFuelConsumption());
}
}
// Щоб реалізувати ієрархію я рішив використати абстрактний клас машини, який має всі базові якості машини
// його нащадки мають додаткове поле, крім того різних типів
// Клас SortByFuelConsuming є інтерфейсом Comparator і використовується для порівняння автомобілів
// за споживанням палива.
// повертає значення за яким потім буде сортуватися масив машин

View File

@@ -1,20 +0,0 @@
package Lab6;
public class Coupe extends Car {
private final String bodyType;
// Клас купе має додатковий тип який визначає тип кузова, або можна написати чи машина без криші чи з кришою
public Coupe(String make, String model, int year, int price, int speed, double fuelConsumption, String bodyType) {
super(make, model, year, price, speed, fuelConsumption);
this.bodyType = bodyType;
}
public String getBodyType() {
return bodyType;
}
@Override
public String toString() {
return super.toString()+ String.format("Type: %-10s |" , bodyType); // викликаємо супер-метод, додаємо тип кузова
}
}

View File

@@ -1,24 +0,0 @@
package Lab6;
public class Hatchback extends Car {
private int numberOfDoors;
// Клас Hatchback має додаткову властивість - кількість дверей
public Hatchback(String make, String model, int year, int price, int speed, double fuelConsumption, int numberOfDoors) {
super(make, model, year, price, speed, fuelConsumption);
this.numberOfDoors = numberOfDoors;
}
public int getNumberOfDoors() {
return numberOfDoors;
}
public void setNumberOfDoors(int numberOfDoors) {
this.numberOfDoors = numberOfDoors;
}
@Override
public String toString() {
return super.toString() + String.format("Doors: %-10d |" , numberOfDoors); // додаємо до супер-методу нову властивість
}
}

View File

@@ -1,23 +0,0 @@
package Lab6;
public class Sedan extends Car {
private int seatingCapacity;
// У об'єктів класу седан особливим є кільість пасажирських місць
public Sedan(String make, String model, int year,int price, int speed, double fuelConsumption, int seatingCapacity) {
super(make, model, year, price, speed, fuelConsumption);
this.seatingCapacity = seatingCapacity;
}
public int getSeatingCapacity() {
return seatingCapacity;
}
public void setSeatingCapacity(int seatingCapacity) {
this.seatingCapacity = seatingCapacity;
}
@Override
public String toString() {
return super.toString() + String.format("Seats: %-10d |" , seatingCapacity); // додаємо до супер-методу додаткову властивість
}
}

View File

@@ -1,182 +0,0 @@
package Lab6;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class TaxiPark {
private static List<Car> cars;
public TaxiPark() {
cars = new ArrayList<>();
} // Створюємо у таксопарка масив машин
public void addAutomobile(Car car) {cars.add(car);} // Метод для додавання машини у таксопарк
// Метод для додавання машини у таксопарк, але користувачем
public void addAutomobileConsole(String carType, String maker, String model, int year, int price, int speed, double fuelConsumption, Object additionalProperty){
Car car;
switch (carType) { // Удосконалений switch для створення конкретного типу машини
case "Coupe" ->
car = new Coupe(maker, model, year, price, speed, fuelConsumption, (String) additionalProperty); //
// Я придумав, що у купе поліморфізм виражається у тому, що вона може бути купе, без криші, туфелькою
// я дуже погано в машинах розбираюсь, тому надіюсь ви мене зрозуміли
case "Hatchback", "Sedan" ->
car = new Hatchback(maker, model, year, price, speed, fuelConsumption, (int) additionalProperty);
default -> {
System.out.println("Invalid car type");
return;
}
}
addAutomobile(car); // Виклик метода для додаваня машини у таксопарк, можна було без нього,
// одною строкою, але так мені це показалось логічним
}
public double calculateFleetCost() { // Метод для обрахунку ціни усіх машин
double totalCost = 0.0;
for (Car car : cars) {
totalCost += car.getPrice(); // Перебираємо усі машини, викликаємо у них метод getPrice()
}
return totalCost; // Повертаємо результат
}
public List<Car> findCarsBySpeedRange(int minSpeed, int maxSpeed) { // Метод для знаходження машин у діапазоні
List<Car> carsInSpeedRange = new ArrayList<>();
for (Car car : cars) {
if (car.getSpeed() >= minSpeed && car.getSpeed() <= maxSpeed) {
carsInSpeedRange.add(car); // Перебираємо машини, які задовольняються умові діапазону
}
}
return carsInSpeedRange;
}
public void boardCars(List<Car> cars){ // Метод для будування таблиці, приймає масив машин, і створює красиву табличку
System.out.println("----------------------------------------------------------------------------");
System.out.printf("%-10s | %-7s | %-6s | %-6s | %-5s | %-5s | %-10s | %n",
"Maker", "Model", "Year", "Price", "Speed", "Fuel", "Special");
System.out.println("----------------------------------------------------------------------------");
for (Car car : cars) {
System.out.println(car.toString());
}
System.out.println("----------------------------------------------------------------------------");
}
public void sortByFuelConsumption() { // Метод у таксопарка, який викликає клас для сортування
cars.sort(new SortByFuelConsuming());
boardCars(TaxiPark.cars); // будуємо відсортовану табличку
}
public static void main(String[] args) {
int C13 = 2401 % 13;
System.out.println("C13 - " + C13 + ", отже треба створити таксопар та ієрархію автомобілів.");
System.out.println("--------------------------------------------------------------\n");
TaxiPark taxiPark = new TaxiPark();
// Додати автомобілі до таксопарку
taxiPark.addAutomobile(new Sedan("Toyota", "Camry", 2020, 3500, 220, 7.5, 5));
taxiPark.addAutomobile(new Coupe("BMW", "M4", 2021, 3000, 150, 9.2, "Coupe"));
taxiPark.addAutomobile(new Hatchback("Volkswagen", "Golf", 2019, 6000, 200, 6.8, 6));
Scanner scanner = new Scanner(System.in); // Під'єднуємо сканер
boolean quit = false;
while (!quit) { // Нескінченний цикл поки користувач не введе 'q'
System.out.print("""
Enter:
'cost' - show total fleet
'sort' - show cars sorted by fuel consumption
'board' - show cars
'add' - buy car on your TaxiPark
'find' - find cars that in speed diapason
or enter 'q' to exit:\s""");
String input = scanner.nextLine();
// Перевірка чи правильно введено слово
if (!input.equals("cost") && !input.equals("sort") && !input.equals("board") && !input.equals("add") && !input.equals("q") && !input.equals("find")) {
System.out.println("Invalid field to sort by! Please enter 'cost', 'sort', 'board', 'add', 'find'.");
continue;
}
// Перевірка виходу з програми
if (input.equals("q")) {
quit = true;
System.out.println("Closing program...");
continue;
}
if (input.equals("cost")){
// Порахувати вартість автопарку
double fleetCost = taxiPark.calculateFleetCost(); // Викликаємо метод, який вже описав
System.out.println("Total fleet cost: $" + fleetCost);
continue;
}
if (input.equals("sort")){
// Відсортувати автомобілі за витратами палива
taxiPark.sortByFuelConsumption();
continue;
}
if (input.equals("board")){
taxiPark.boardCars(TaxiPark.cars); // Виведення таблички
continue;
}
if (input.equals("find")){
int minSpeed, maxSpeed;
System.out.println("Enter min speed: "); // Користувач вводе межі діапазона
minSpeed = scanner.nextInt();
System.out.println("Enter max speed:");
maxSpeed = scanner.nextInt();
scanner.nextLine(); // Тут залишався \n тому ми його з'їли
List<Car> carsInSpeedRange = taxiPark.findCarsBySpeedRange(minSpeed, maxSpeed); // Масив машин діапазону
System.out.println("Cars within the speed range of " + minSpeed + " km/h to " + maxSpeed + " km/h:");
taxiPark.boardCars(carsInSpeedRange); // Створенний масив передаємо методу для будування таблички
}
if (input.equals("add")){
// Користувач вводе багато значень, перевірки не добавив, тому акуратно)
System.out.println("Choose type of car: 'Sedan', 'Coupe', 'Hatchback'");
String carType = scanner.nextLine();
System.out.println("Enter Maker: ");
String maker = scanner.nextLine();
System.out.println("Enter Model: ");
String model = scanner.nextLine();
System.out.println("Enter year: ");
int year = scanner.nextInt();
System.out.println("Enter price (int)");
int price = scanner.nextInt();
System.out.println("Enter speed (int)");
int speed = scanner.nextInt();
System.out.println("Enter fuel consumption");
double fuelConsumption = scanner.nextDouble();
scanner.nextLine();
Object additionalProperty = null; // Абстрактний об'єкт, далі в switch він набуде тип
switch (carType) {
case "Sedan", "Hatchback" -> {
System.out.println("Enter special(int):");
additionalProperty = scanner.nextInt();
}
case "Coupe" -> {
System.out.println("Enter special(any):");
additionalProperty = scanner.nextLine();
}
default -> System.out.println("Invalid car type");
}
// Передаємо всі введені значення методу для купівлі машини у таксопарк
taxiPark.addAutomobileConsole(carType, maker, model, year, price, speed, fuelConsumption, additionalProperty);
}
}
}
}