From c27b4fbae52816d55254764f223ad74e5d5b861b Mon Sep 17 00:00:00 2001 From: Suzik123 Date: Sun, 30 Apr 2023 14:10:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=B0=205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab5/Letter.java | 38 +++++++++ lab5/Main.java | 188 ++++++++++++++++++++++++++++++++++++++++++++ lab5/Sentence.java | 32 ++++++++ lab5/Text.java | 27 +++++++ lab5/Word.java | 29 +++++++ lab5/Znak.java | 26 ++++++ laba4/Cosmetic.java | 14 ++-- laba4/Main.java | 75 ++++++++---------- 8 files changed, 380 insertions(+), 49 deletions(-) create mode 100644 lab5/Letter.java create mode 100644 lab5/Main.java create mode 100644 lab5/Sentence.java create mode 100644 lab5/Text.java create mode 100644 lab5/Word.java create mode 100644 lab5/Znak.java diff --git a/lab5/Letter.java b/lab5/Letter.java new file mode 100644 index 0000000..c361485 --- /dev/null +++ b/lab5/Letter.java @@ -0,0 +1,38 @@ +public class Letter { + // Поле що містить літеру + private char simbol; + // Конструктор + public Letter(char simbol) { + this.simbol = simbol; + } + // Метод повернення літери + public char getLetter(){ + return simbol; + } + // Метод перевірки на те, чи є буква пробілом + public boolean isSpace(){ + if(this.simbol==' '){ + return true; + } + return false; + } + // Метод перевірки на те, чи є буква комою + public boolean isKome(){ + if(this.simbol==','){ + return true; + } + return false; + } + // Метод перевірки на те, чи є буква тире + public boolean isDash(){ + if(this.simbol=='-'){ + return true; + } + return false; + } + // Метод виводу літери + public void printLetter(){ + System.out.print(simbol); + } + +} diff --git a/lab5/Main.java b/lab5/Main.java new file mode 100644 index 0000000..f229092 --- /dev/null +++ b/lab5/Main.java @@ -0,0 +1,188 @@ +import java.util.*; + +public class Main { + public static void main(String[] args) { + // Ввід текста користувачем + System.out.println("Введіть текст:"); + Scanner scan = new Scanner(System.in); + String inputText1 = scan.nextLine(); + // Заміна табуляцій на пробіли + String inputText = inputText1.replace("\n", " "); + // Перехід від формату String до формату Text + Text text = FromStringToText(inputText); + // Зміна порядку слів в реченні + text.changeOrder(); + // Вивід результату + text.printText(); + } + // Метод переходу від String до Text + public static Text FromStringToText(String text) { + // Створюємо массив char з двома пробілами в кінці + char[] chars1 = text.toCharArray(); + char[] chars = Arrays.copyOf(chars1, chars1.length + 2); + chars[chars.length-2]=' '; + chars[chars.length-1]=' '; + // Створюємо массив, який буде містити літери і знаки + ArrayList modifiedText = new ArrayList<>(); + // Змінна, яка буде контролювати наявність знаків в тексті + int k = 0; + for (int i = 0; i < chars.length; i++) { + if (chars[i] == '!' || chars[i] == '?' || chars[i] == '.') { + if (chars[i + 1] == '!' || chars[i + 1] == '?' || chars[i + 1] == '.') { + if (chars[i + 1 + 1] == '!' || chars[i + 1 + 1] == '?' || chars[i + 1 + 1] == '.') { + // Якщо в тексті трапляється знак, який складається відразу з трьох знаків, то програма зараховує його як один і додає в массив з літерами і знаками + ArrayList znaki = new ArrayList<>(); + znaki.add(chars[i]); + znaki.add(chars[i + 1]); + znaki.add(chars[i + 1 + 1]); + Znak element = new Znak(znaki); + // Додаємо до лічильника два, щоб цикл не обробляв знаки ще раз + i = i + 1 + 1; + modifiedText.add(element); + k = k + 1; + } else { + // Якщо в тексті трапляється знак, який складається відразу з двох знаків, то програма зараховує його як один і додає в массив з літерами і знаками + ArrayList znaki = new ArrayList<>(); + znaki.add(chars[i]); + znaki.add(chars[i + 1]); + Znak element = new Znak(znaki); + // Додаємо до лічильника один, щоб цикл не обробляв знаки ще раз + i = i + 1; + modifiedText.add(element); + k = k + 1; + } + + } else { + // Якщо в тексті трапився один розділовий знак, то він додається до масиву з літер і знаків + ArrayList znaki = new ArrayList<>(); + znaki.add(chars[i]); + Znak element = new Znak(znaki); + modifiedText.add(element); + k = k + 1; + } + + } else { + // Якщо елмент массиву chars не виявився знаком, то він додається як літера + Letter element = new Letter(chars[i]); + modifiedText.add(element); + } + + + } + // Якщо знаків в тексті не було, програма закінчує роботу + if (k == 0) { + System.out.println("В вашому тексті нема жодного речення!"); + System.exit(0); + } + // Змінна яка буде нижнею межею для зрізання слова + int l = 0; + // Масиви для створення речень і тексту відповідно + ArrayList sent = new ArrayList(); + ArrayList tex = new ArrayList(); + for (int i = 0; i < modifiedText.size(); i++) { + // Створюємо змінні, які містять даний елемент масиву і минулий + Object x = modifiedText.get(i); + Object x1 = new Object(); + if (i > 0) { + x1 = modifiedText.get(i - 1); + } + // Перевірка чи є елемент літерою + if (x instanceof Letter) { + // Переходимо до класу Letter + Letter z = (Letter) x; + Letter y = new Letter(' '); + if (i > 0) { + y = (Letter) x1; + } + // Перевірка чи є елемент комою + if (z.isKome()) { + // Створення слова з всіх елементів, що були до коми і додавання його до речення + List wor1 = modifiedText.subList(l, i); + ArrayList word = new ArrayList<>(); + for (Object j : wor1) { + Letter let = (Letter) j; + word.add(let); + } + Word w = new Word(word); + sent.add(w); + // Зсув границі + l = i + 1; + // Додавання коми до речення + ArrayList kome = new ArrayList<>(); + kome.add(z); + Word Kome = new Word(kome); + sent.add(Kome); + + + } + // Перевірка чи є літера пробілом + if (z.isSpace()) { + // Перевірка чи є минулий символ комою + if (y.isKome() || y.isDash()) { + // Додавання пробілу до речення і зсув границі + ArrayList word1 = new ArrayList<>(); + word1.add(z); + Word word = new Word(word1); + sent.add(word); + l = i + 1; + } else { + // Створення слова з всіх елементів, що були до пробіла і додавання його до речення + List word1 = modifiedText.subList(l, i); + ArrayList word = new ArrayList<>(); + for (Object j : word1) { + Letter let = (Letter) j; + word.add(let); + } + Word w = new Word(word); + sent.add(w); + // Додавання пробілу до речення + ArrayList space = new ArrayList<>(); + space.add(z); + Word Space = new Word(space); + sent.add(Space); + // Зсув границі + l = i + 1; + } + } + // Перевірка чи є елемент тире + if (z.isDash()) { + if (y.isSpace()) { + // Якщо минулий елемент був пробілом, тире додається до речення + ArrayList word1 = new ArrayList<>(); + word1.add(z); + Word word = new Word(word1); + sent.add(word); + l = i + 1; + } + } + } else if (x instanceof Znak) { + // Коли елемент є знаком, то створюється речення, яке додається до тексту + List word1 = modifiedText.subList(l, i); + ArrayList word = new ArrayList<>(); + for (Object j : word1) { + Letter let = (Letter) j; + word.add(let); + } + Word w = new Word(word); + sent.add(w); + Znak z = (Znak) x; + int jump = 2; + // Зсув границі і лічильника + l = i+jump; + i = i + z.Lenght(); + + z.addSpace(); + + Sentence sentence = new Sentence(sent, z); + tex.add(sentence); + // Очищення речення + sent= new ArrayList<>(); + } + + } + // Створення і повернення тексту + Text text2 = new Text(tex); + text2.printText(); + return text2; + } +} \ No newline at end of file diff --git a/lab5/Sentence.java b/lab5/Sentence.java new file mode 100644 index 0000000..ad00a8d --- /dev/null +++ b/lab5/Sentence.java @@ -0,0 +1,32 @@ +import java.util.ArrayList; + +public class Sentence { + // Поля, що містять речення + private ArrayList words; + private Znak znak; + // Конструктор класу + public Sentence(ArrayList words, Znak znak){ + this.words = words; + this.znak = znak; + + } + // Метод заміни першого слова на останнє + public void ChangeOrder(){ + //Отримуємо перше і останнє слово речення + Word FirstWord = words.get(0); + Word LastWord = words.get(words.size()-1); + //Використовуємо метод ChangeRegistr класу word + FirstWord.ChangeRegistr(false); + LastWord.ChangeRegistr(true); + //Вставляємо в речення + words.set(0, LastWord); + words.set(words.size()-1, FirstWord); + } + // Метод виводу речення + public void printSentence(){ + for(Word i:words){ + i.printWord(); + } + znak.printZnak(); + } +} diff --git a/lab5/Text.java b/lab5/Text.java new file mode 100644 index 0000000..bf1c518 --- /dev/null +++ b/lab5/Text.java @@ -0,0 +1,27 @@ +import java.util.ArrayList; + +public class Text { + // Поле що містить текст + private ArrayList sentences; + // Конструктор класу + public Text(ArrayList sentences){ + this.sentences = sentences; + } + // Метод виводу текста + public void printText(){ + for(Sentence i:sentences){ + i.printSentence(); + } + } + // Метод повернення довжини тексту + + public int Lenght(){ + return sentences.size(); + } + // Метод зміни порядку слів у тексті + public void changeOrder(){ + for(Sentence i: sentences){ + i.ChangeOrder(); + } + } +} diff --git a/lab5/Word.java b/lab5/Word.java new file mode 100644 index 0000000..7b110c1 --- /dev/null +++ b/lab5/Word.java @@ -0,0 +1,29 @@ +import java.util.ArrayList; + +public class Word { + // Поле, що містить слово + private ArrayList letters; + // Конструктор класу + public Word(ArrayList letters){ + this.letters = letters; + } + // Метод зміни регістру першої літери слова + public void ChangeRegistr(boolean loh /*low or high?*/) { + Letter FirstLetter = letters.get(0); + char Let = FirstLetter.getLetter(); + // В залежності від значення змінної loh літера змінюється або в нижній або в верхній регістр + if(loh==true){ + Let = Character.toUpperCase(Let); + } else { + Let = Character.toLowerCase(Let); + } + letters.set(0, new Letter(Let)); + } + // Метод виводу слова + public void printWord(){ + for(Letter i:letters){ + i.printLetter(); + } + } + +} diff --git a/lab5/Znak.java b/lab5/Znak.java new file mode 100644 index 0000000..cd850d9 --- /dev/null +++ b/lab5/Znak.java @@ -0,0 +1,26 @@ +import java.util.ArrayList; + +public class Znak { + // Поле, що містить знак + private ArrayList simbols; + // Конструктор класу + public Znak(ArrayList simbols) { + this.simbols = simbols; + } + // Метод визначення довжини знаку + public int Lenght(){ + int x = simbols.size(); + return x; + } + // Метод виводу знаку + public void printZnak(){ + for(Character i:simbols){ + System.out.print(i); + } + } + // Метод додавання пробілу в кінці знаку + + public void addSpace(){ + simbols.add(' '); + } +} diff --git a/laba4/Cosmetic.java b/laba4/Cosmetic.java index 5b04ae9..4b84f38 100644 --- a/laba4/Cosmetic.java +++ b/laba4/Cosmetic.java @@ -1,15 +1,16 @@ import java.util.Random; public class Cosmetic { - public String name; - public int price_in_$; - public int health_damage_from1to10; - public int attractiveness_from1to10; - public int quality_from1to10; - public int brightness_from1to10; + private String name; + private int price_in_$; + private int health_damage_from1to10; + private int attractiveness_from1to10; + private int quality_from1to10; + private int brightness_from1to10; public Cosmetic(String name) { Random random = new Random(); + this.name= name; this.price_in_$ = random.nextInt(1000) + 1;; this.health_damage_from1to10 = random.nextInt(11); @@ -19,6 +20,7 @@ public class Cosmetic { } public Cosmetic(String name, int price_in_$, int health_damage_from1to10, int attractiveness_from1to10, int quality_from1to10, int brightness_from1to10) { + Random random = new Random(); this.name= name; this.price_in_$ = price_in_$; this.health_damage_from1to10 = health_damage_from1to10; diff --git a/laba4/Main.java b/laba4/Main.java index 94454d0..39b5d46 100644 --- a/laba4/Main.java +++ b/laba4/Main.java @@ -3,6 +3,7 @@ import java.util.InputMismatchException; import java.util.Scanner; import java.util.Arrays; import java.util.Comparator; + public class Main { public static void main(String[] args) { @@ -22,10 +23,9 @@ public class Main { Cosmetic[] arr = new Cosmetic[quantity]; for (int i = 0; i < quantity; i++) { - System.out.println("Введіть назву об'єкта №" + (i + 1)+": "); + System.out.println("Введіть назву об'єкта №" + (i + 1) + ": "); String name = scanner.next(); while (true) { - System.out.println("Бажаєте заповнить об'єкт №" + (i + 1) + " випадковими значеннями?(Введіть так або ні)"); String anwser = scanner.next(); if (anwser.equalsIgnoreCase("так")) { @@ -176,71 +176,60 @@ public class Main { } } System.out.println("Масив відсортований за зростанням:"); - if (num1==1){ + if (num1 == 1) { Arrays.sort(arr, Comparator.comparingInt(Cosmetic::getPrice_in_$)); - for(Cosmetic i: arr){ - System.out.println(i.getName()+" - "+i.getPrice_in_$()); + for (Cosmetic i : arr) { + System.out.println(i.getName() + " - " + i.getPrice_in_$()); } - } - else if(num1==2){ + } else if (num1 == 2) { Arrays.sort(arr, Comparator.comparingInt(Cosmetic::getHealth_damage_from1to10)); - for(Cosmetic i: arr){ - System.out.println(i.getName()+" - "+i.getHealth_damage_from1to10()); + for (Cosmetic i : arr) { + System.out.println(i.getName() + " - " + i.getHealth_damage_from1to10()); } - } - else if(num1==3){ + } else if (num1 == 3) { Arrays.sort(arr, Comparator.comparingInt(Cosmetic::getAttractiveness_from1to10)); - for(Cosmetic i: arr){ - System.out.println(i.getName()+" - "+i.getAttractiveness_from1to10()); + for (Cosmetic i : arr) { + System.out.println(i.getName() + " - " + i.getAttractiveness_from1to10()); } - } - else if(num1==4){ + } else if (num1 == 4) { Arrays.sort(arr, Comparator.comparingInt(Cosmetic::getQuality_from1to10)); - for(Cosmetic i: arr){ - System.out.println(i.getName()+" - "+i.getQuality_from1to10()); + for (Cosmetic i : arr) { + System.out.println(i.getName() + " - " + i.getQuality_from1to10()); } - } - else if(num1==5){ + } else if (num1 == 5) { Arrays.sort(arr, Comparator.comparingInt(Cosmetic::getBrightness_from1to10)); - for(Cosmetic i: arr){ - System.out.println(i.getName()+" - "+i.getBrightness_from1to10()); + for (Cosmetic i : arr) { + System.out.println(i.getName() + " - " + i.getBrightness_from1to10()); } } System.out.println("Масив відсортований за спаданням:"); - if (num2==1){ + if (num2 == 1) { Arrays.sort(arr, Comparator.comparingInt(Cosmetic::getPrice_in_$).reversed()); - for(Cosmetic i: arr){ - System.out.println(i.getName()+" - "+i.getPrice_in_$()); + for (Cosmetic i : arr) { + System.out.println(i.getName() + " - " + i.getPrice_in_$()); } - } - else if(num2==2){ + } else if (num2 == 2) { Arrays.sort(arr, Comparator.comparingInt(Cosmetic::getHealth_damage_from1to10).reversed()); - for(Cosmetic i: arr){ - System.out.println(i.getName()+" - "+i.getHealth_damage_from1to10()); + for (Cosmetic i : arr) { + System.out.println(i.getName() + " - " + i.getHealth_damage_from1to10()); } - } - else if(num2==3){ + } else if (num2 == 3) { Arrays.sort(arr, Comparator.comparingInt(Cosmetic::getAttractiveness_from1to10).reversed()); - for(Cosmetic i: arr){ - System.out.println(i.getName()+" - "+i.getAttractiveness_from1to10()); + for (Cosmetic i : arr) { + System.out.println(i.getName() + " - " + i.getAttractiveness_from1to10()); } - } - else if(num2==4){ + } else if (num2 == 4) { Arrays.sort(arr, Comparator.comparingInt(Cosmetic::getQuality_from1to10).reversed()); - for(Cosmetic i: arr){ - System.out.println(i.getName()+" - "+i.getQuality_from1to10()); + for (Cosmetic i : arr) { + System.out.println(i.getName() + " - " + i.getQuality_from1to10()); } - } - else if(num2==5){ + } else if (num2 == 5) { Arrays.sort(arr, Comparator.comparingInt(Cosmetic::getBrightness_from1to10).reversed()); - for(Cosmetic i: arr){ - System.out.println(i.getName()+" - "+i.getBrightness_from1to10()); + for (Cosmetic i : arr) { + System.out.println(i.getName() + " - " + i.getBrightness_from1to10()); } } - - - } } \ No newline at end of file