diff --git a/Seminar05/Seminar05task01.java b/Seminar05/Seminar05task01.java new file mode 100644 index 0000000..e641890 --- /dev/null +++ b/Seminar05/Seminar05task01.java @@ -0,0 +1,100 @@ +//Реализуйте структуру телефонной книги с помощью HashMap, учитывая, что 1 человек может иметь несколько телефонов. +package Seminar05; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Scanner; + +public class Seminar05task01 { + public static void main(String[] args) { + ArrayList>> phoneBook = new ArrayList<>(); + String[] fieldsArray = {"ID", "First Name", "Last Name", "Address", "Phone"}; + Scanner input = new Scanner(System.in); + boolean flag = true; + System.out.println("Добро пожаловать в телефонный справочник!"); + while (flag) { + int menuChoice = choiceMenu(input); + switch (menuChoice) { + case 1 -> printPhoneBook(phoneBook, fieldsArray); + case 2 -> fillMap(input, phoneBook, fieldsArray); + case 3 -> deleteEntry(input, phoneBook); + case 0 -> flag = false; + } + } + + } + + private static void fillMap(Scanner scan, ArrayList>> book, String[] fields) { + HashMap> userInput = new HashMap<>(); + + ArrayList bookSize = new ArrayList<>(); + bookSize.add(String.valueOf(book.size())); + userInput.put("ID", bookSize); + + ArrayList phones = new ArrayList<>(); + String tmp = ""; + for (String field : fields) { + if (!field.equals("ID") && !field.equals("Phone")) { + System.out.printf("Введите значение поля %s: ", field); + ArrayList value = new ArrayList<>(); + tmp = scan.nextLine(); + value.add(tmp); + userInput.put(field, value); + } + while (field.equals("Phone")) { + System.out.printf("Введите значение поля %s: ", field); + tmp = scan.nextLine(); + phones.add(tmp); + System.out.print("Добавить ещё один номер телефона? Д/Н?: "); + String choice = scan.nextLine().toUpperCase(); + if (choice.equals("Н") || choice.equals("N")) { + userInput.put(field, phones); + break; + } + } + } + book.add(userInput); + } + + private static void printPhoneBook(ArrayList>> book, String[] fields) { + if (book.size() == 0) { + System.out.println("Записей не обнаружено."); + } + for (HashMap> map : book) { + for (String field : fields) { + if (!field.equals("Phone")) { + System.out.printf("%s = %s\n", field, map.get(field).get(0)); + } else { + for (int i = 0; i < map.get(field).size(); i++) { + System.out.printf("%s%d = %s\n", field, i + 1, map.get(field).get(i)); + } + } + } + System.out.println("==================="); + } + System.out.println(); + } + + private static int choiceMenu(Scanner scan) { + System.out.println(); + System.out.print(""" + Выберете пункт меню: + 1 - Отобразить справочник + 2 - Добавить запись в справочник + 3 - Удалить запись из справочника + 0 - Выход + :"""); + int choice = scan.nextInt(); + scan.nextLine(); + System.out.println(); + return choice; + } + + private static void deleteEntry(Scanner inp, ArrayList>> book) { + System.out.print("Введите ID записи для удаления: "); + int deletion = inp.nextInt(); + inp.nextLine(); + book.remove(deletion); + System.out.println(); + } +} diff --git a/Seminar05/Seminar05task02.java b/Seminar05/Seminar05task02.java new file mode 100644 index 0000000..7bd1851 --- /dev/null +++ b/Seminar05/Seminar05task02.java @@ -0,0 +1,83 @@ +//Пусть дан список сотрудников: +// Иван Иванов +// Светлана Петрова +// Кристина Белова +// Анна Мусина +// Анна Крутова +// Иван Юрин +// Петр Лыков +// Павел Чернов +// Петр Чернышов +// Мария Федорова +// Марина Светлова +// Мария Савина +// Мария Рыкова +// Марина Лугова +// Анна Владимирова +// Иван Мечников +// Петр Петин +// Иван Ежов +// Написать программу, которая найдет и выведет повторяющиеся имена с количеством повторений. +// Отсортировать по убыванию популярности. +package Seminar05; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.*; + +public class Seminar05task02 { + public static void main(String[] args) throws FileNotFoundException { + ArrayList db = new ArrayList<>(); + HashMap dbData = new HashMap<>(); + getFromFile(dbData, db); + System.out.println("Исходный список: "); + System.out.println(db); + System.out.println("\nКоличество повторяющихся имён в файле: "); + printDuplicates(dbData); + LinkedHashMap sortedData = new LinkedHashMap<>(); + sortedDB(dbData, sortedData); + System.out.println("\nОтсортированное количество повторяющихся имён в файле: "); + printDuplicates(sortedData); + } + + private static void getFromFile(HashMap data, ArrayList original) throws FileNotFoundException { + File reader = new File("Seminar05/list.txt"); + Scanner scanner = new Scanner(reader); + while (scanner.hasNextLine()) { + String input = scanner.nextLine(); + String[] temp = input.split(" "); + original.add(input); + if (data.containsKey(temp[0])) { + data.put(temp[0], data.get(temp[0]) + 1); + } else { + data.put(temp[0], 1); + } + } + } + + private static void printDuplicates(HashMap data) { + Set> entries = data.entrySet(); + + for (Map.Entry entry : entries) { + System.out.printf("%10s %s %d\n", entry.getKey(), ":", entry.getValue()); + } + } + + private static void sortedDB(HashMap data, LinkedHashMap sorted) { + String maxKey = ""; + int maxValue = 0; + while (data.size() > 0) { + Set> entries = data.entrySet(); + for (Map.Entry entry : entries) { + if (entry.getValue() > maxValue) { + maxValue = entry.getValue(); + maxKey = entry.getKey(); + } + } + sorted.put(maxKey, maxValue); + data.remove(maxKey); + maxKey = ""; + maxValue = 0; + } + } +} diff --git a/Seminar05/Seminar05task03.java b/Seminar05/Seminar05task03.java new file mode 100644 index 0000000..0999e96 --- /dev/null +++ b/Seminar05/Seminar05task03.java @@ -0,0 +1,61 @@ +//Реализовать алгоритм пирамидальной сортировки (HeapSort). (Можно использовать массивы) +package Seminar05; + +import java.util.Arrays; +import java.util.Scanner; +import java.util.concurrent.ThreadLocalRandom; + +public class Seminar05task03 { + public static void main(String[] args) { + ThreadLocalRandom randint = ThreadLocalRandom.current(); + Scanner scanner = new Scanner(System.in); + System.out.print("Введите размер массива: "); + int arraySize = scanner.nextInt(); + int[] arr = new int[arraySize]; + System.out.println("Сгенерированный массив:"); + createArray(arr, randint, arraySize); + System.out.println(Arrays.toString(arr)); + heapSort(arr); + System.out.println("\nОтсортированный массив: "); + System.out.println(Arrays.toString(arr)); + } + + private static void createArray(int[] array, ThreadLocalRandom rand, int size) { + for (int i = 0; i < size; i++) { + array[i] = rand.nextInt(0, 1000); + } + } + + private static void heapSort(int[] array) { + int arraySize = array.length - 1; + for (int i = 0; i < arraySize; i++) { + if (2 * i + 2 < arraySize) { + if (array[i] > array[2 * i + 1] && i % 2 == 0) { + int temp = array[i]; + array[i] = array[2 * i + 1]; + array[2 * i + 1] = temp; + } else if (array[i] > array[2 * i + 2] && i % 2 != 0) { + int temp = array[i]; + array[i] = array[2 * i + 2]; + array[2 * i + 2] = temp; + } + } + } + int max; + int maxi = 0; + for (int i = arraySize; i > 0; i--) { + max = array[i]; + for (int j = 0; j < i; j++) { + if (array[j] > max) { + max = array[j]; + maxi = j; + } + } + if (max > array[i]) { + int temp = array[i]; + array[i] = array[maxi]; + array[maxi] = temp; + } + } + } +} diff --git a/Seminar05/Seminar05task04.java b/Seminar05/Seminar05task04.java new file mode 100644 index 0000000..79ebe75 --- /dev/null +++ b/Seminar05/Seminar05task04.java @@ -0,0 +1,101 @@ +//На шахматной доске расставить 8 ферзей так, чтобы они не били друг друга. +package Seminar05; + +import java.util.ArrayList; + +public class Seminar05task04 { + public static void main(String[] args) { + String[][] chessBoard = new String[9][9]; + fillBoard(chessBoard); + placeQueen(chessBoard); + printBoard(chessBoard); + } + + private static void fillBoard(String[][] board) { + String[] fields = {"A", "B", "C", "D", "E", "F", "G", "H"}; + for (int i = 0; i <= 8; i++) { + for (int j = 0; j <= 8; j++) { + if (i == 0 && j != 0) { + board[i][j] = String.valueOf(j); + } else if (j == 0 && i != 0) { + board[i][j] = fields[i - 1]; + } else { + board[i][j] = "."; + } + } + } + } + + private static void printBoard(String[][] board) { + for (int i = 0; i < board.length; i++) { + for (int j = 0; j < board[i].length; j++) { + if (i == 0 && j == 0) { + System.out.print(" "); + } else { + System.out.print("|"); + System.out.print(board[i][j]); + } + } + System.out.println("|"); + } + } + + private static void placeQueen(String[][] board) { + ArrayList positions = new ArrayList<>(); + int x = 1; + int y = 1; + while (true) { + for (int i = x; i < board.length; i++) { + for (int j = y; j < board[i].length; j++) { + board[i][j] = "Q"; + if (checkPositions(board, i, j)) { + int[] current = new int[2]; + current[0] = i; + current[1] = j; + positions.add(current); + break; + } else { + board[i][j] = "."; + } + } + } + if (positions.size() < 7) { + int[] temp = positions.get(positions.size() - 1); + if (temp[1] + 1 == 9 || temp[0] + 1 == 9) { + x = temp[0] + 1; + y = 1; + } else { + x = temp[0]; + y = temp[1] + 1; + } + positions.remove(positions.size() - 1); + for (int i = x; i < 9; i++) { + for (int j = 1; j < 9; j++) { + board[i][j] = "."; + } + } + } else { + break; + } + } + } + + private static boolean checkPositions(String[][] board, int row, int col) { + for (int i = 1; i < board.length; i++) { + for (int j = 1; j < board[i].length; j++) { + if (i == row || j == col) { + if (!(i == row && j == col)) { + if (board[i][j].equals("Q")) { + return false; + } + } + } else if (Math.abs(i - row) == Math.abs(j - col)) { + if (board[i][j].equals("Q")) { + return false; + } + } + } + } + return true; + } +} diff --git a/Seminar05/list.txt b/Seminar05/list.txt new file mode 100644 index 0000000..b975d78 --- /dev/null +++ b/Seminar05/list.txt @@ -0,0 +1,18 @@ +Иван Иванов +Светлана Петрова +Кристина Белова +Анна Мусина +Анна Крутова +Иван Юрин +Петр Лыков +Павел Чернов +Петр Чернышов +Мария Федорова +Марина Светлова +Мария Савина +Мария Рыкова +Марина Лугова +Анна Владимирова +Иван Мечников +Петр Петин +Иван Ежов diff --git a/Seminar06/FinalProject.java b/Seminar06/FinalProject.java new file mode 100644 index 0000000..40fc0e6 --- /dev/null +++ b/Seminar06/FinalProject.java @@ -0,0 +1,65 @@ +// Подумать над структурой класса Ноутбук для магазина техники - выделить поля и методы. Реализовать в java. +// Создать множество ноутбуков. +// Написать метод, который будет запрашивать у пользователя критерий (или критерии) фильтрации и выведет ноутбуки, +// отвечающие фильтру. Критерии фильтрации можно хранить в Map. + +// Например: +// “Введите цифру, соответствующую необходимому критерию: +// 1 - ОЗУ +// 2 - Объем ЖД +// 3 - Операционная система +// 4 - Цвет … +// Далее нужно запросить минимальные значения для указанных критериев - сохранить параметры фильтрации можно также +// в Map. Отфильтровать ноутбуки их первоначального множества и вывести проходящие по условиям. +package Seminar06; + +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Scanner; + +public class FinalProject { + public static void main(String[] args) throws FileNotFoundException { + Laptop laptop = new Laptop(); + laptop.readDB(); + Scanner scanner = new Scanner(System.in); + boolean flag = true; + while (flag) { + int choice = menu(scanner); + System.out.println(); + switch (choice) { + case 1 -> laptop.printDB(laptop.laptops); + case 2 -> filtration(laptop, scanner); + case 0 -> { + flag = false; + System.out.println("До новых встреч!"); + } + } + } + } + + private static int menu(Scanner scanner) { + System.out.println("Выберите пункт меню:"); + System.out.print(""" + 1. Показать доступные ноутбуки + 2. Поиск ноутбука по заданным параметрам + 0. Выход + : """); + return scanner.nextInt(); + } + + private static void filtration(Laptop laptop, Scanner scanner) { + System.out.println("По каким параметрам ищем: "); + laptop.printFields(); + System.out.print(": "); + int choose = scanner.nextInt() - 1; + System.out.println(); + ArrayList resultSearch = laptop.findParameters(choose); + laptop.printSet(resultSearch, choose); + System.out.print(": "); + String chooseParam = resultSearch.get(scanner.nextInt() - 1); + System.out.println(); + ArrayList result = laptop.findFiltered(choose, chooseParam); + laptop.printDB(result); + } +} + diff --git a/Seminar06/Laptop.java b/Seminar06/Laptop.java new file mode 100644 index 0000000..c3fce90 --- /dev/null +++ b/Seminar06/Laptop.java @@ -0,0 +1,71 @@ +package Seminar06; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Scanner; +import java.util.Set; + +public class Laptop { + ArrayList laptops = new ArrayList<>(); + String[] fields = {"Brand", "Model", "Display", "CPU", "GPU", "RAM", "SSD", "OS", "Color", "Price"}; + + public void readDB() throws FileNotFoundException { + File file = new File("Seminar06/db.txt"); + Scanner scanner = new Scanner(file); + while (scanner.hasNextLine()) { + String[] temp = scanner.nextLine().split(" / "); + laptops.add(temp); + } + } + + public void printDB(ArrayList forPrint) { + int c = 1; + for (String[] laptop : forPrint) { + System.out.printf("#%d\n", c); + for (int i = 0; i < laptop.length; i++) { + System.out.printf("%s: %s\n", fields[i], laptop[i]); + } + System.out.println(); + c++; + } + } + + public void printFields() { + for (int i = 0; i < fields.length; i++) { + System.out.printf("%d: %s\n", i + 1, fields[i]); + } + } + + public ArrayList findParameters(int index) { + ArrayList result = new ArrayList<>(); + Set tempSet = new HashSet<>(); + for (String[] laptop : laptops) { + tempSet.add(laptop[index]); + } + for (String item : tempSet) { + result.add(item); + } + return result; + } + + public void printSet(ArrayList set, int index) { + int c = 1; + System.out.printf("%s:\n", fields[index]); + for (String i : set) { + System.out.printf("%d: %s\n", c, i); + c++; + } + } + + public ArrayList findFiltered(int index, String searchStr) { + ArrayList result = new ArrayList<>(); + for (String[] laptop : laptops) { + if (laptop[index].equals(searchStr)) { + result.add(laptop); + } + } + return result; + } +} diff --git a/Seminar06/db.txt b/Seminar06/db.txt new file mode 100644 index 0000000..c55c8cc --- /dev/null +++ b/Seminar06/db.txt @@ -0,0 +1,8 @@ +HP / 22xx7 / 15.6 / i7 11300 / Iris / 16 ГБ / 512 ГБ / Linux / Grey / 960$ +ASUS / x123b / 15.6 / i5 10500 / 3050 / 16 ГБ / 512 ГБ / Windows / Red / 780$ +HP / 22ff1 / 15.6 / i3 11300 / Iris / 8 ГБ / 256 ГБ / Linux / Grey / 460$ +Lenovo / IdeaPad 3 / 15.6 / AMD Ryzen 5 / AMD Radeon Graphics / 16 ГБ / 512 ГБ / Windows / Silver / 680$ +Apple / MacBook Air 13 Late 2020 / 13.3 / Apple M1 / Apple graphics 7-core / 8 ГБ / 1 ТБ / MacOS / Silver / 2500$ +ASUS / x123a / 15.6 / i5 10500 / 3050 / 8ГБ / 512 ГБ / Windows / Black / 650$ +Lenovo / IdeaPad 3 / 15.6 / AMD Ryzen 5 / AMD Radeon Graphics / 16 ГБ / 512 ГБ / Windows / Blue / 680$ +Apple / MacBook Pro 16 Late 2022 / 16 / Apple M2 / Apple graphics 10-core / 16 ГБ / 1 ТБ / MacOS / Silver / 3500$ \ No newline at end of file