/
itokar98
/
HomeWorkVolatileTask1
Обзор
Документация
Войти
/
itokar98
/
HomeWorkVolatileTask1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/Main.java
125 строк
4 KB
Ilya Tokar
first commit
30 ноя 2025, 13:10
30 ноя 2025, 13:10
da00fa3
Код
Авторство
О чём код?
import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; public class Main { // Статические счетчики для разных длин слов private static final AtomicInteger countLength3 = new AtomicInteger(0); private static final AtomicInteger countLength4 = new AtomicInteger(0); private static final AtomicInteger countLength5 = new AtomicInteger(0); // Генератор случайного текста public static String generateText(String letters, int length) { Random random = new Random(); StringBuilder text = new StringBuilder(); for (int i = 0; i < length; i++) { text.append(letters.charAt(random.nextInt(letters.length()))); } return text.toString(); } // Проверка на палиндром public static boolean isPalindrome(String text) { int left = 0; int right = text.length() - 1; while (left < right) { if (text.charAt(left) != text.charAt(right)) { return false; } left++; right--; } return true; } // Проверка на одинаковые буквы public static boolean isSameLetter(String text) { char first = text.charAt(0); for (int i = 1; i < text.length(); i++) { if (text.charAt(i) != first) { return false; } } return true; } // Проверка на возрастающий порядок букв public static boolean isAscendingOrder(String text) { for (int i = 0; i < text.length() - 1; i++) { if (text.charAt(i) > text.charAt(i + 1)) { return false; } } return true; } // Увеличение счетчика в зависимости от длины слова private static void incrementCounter(int length) { switch (length) { case 3: countLength3.incrementAndGet(); break; case 4: countLength4.incrementAndGet(); break; case 5: countLength5.incrementAndGet(); break; } } public static void main(String[] args) throws InterruptedException { // Генерация 100,000 слов Random random = new Random(); String[] texts = new String[100_000]; for (int i = 0; i < texts.length; i++) { texts[i] = generateText("abc", 3 + random.nextInt(3)); } // Поток для проверки палиндромов Thread palindromeThread = new Thread(() -> { for (String text : texts) { if (isPalindrome(text)) { incrementCounter(text.length()); } } }); // Поток для проверки одинаковых букв Thread sameLetterThread = new Thread(() -> { for (String text : texts) { if (isSameLetter(text)) { incrementCounter(text.length()); } } }); // Поток для проверки возрастающего порядка Thread ascendingThread = new Thread(() -> { for (String text : texts) { if (isAscendingOrder(text)) { incrementCounter(text.length()); } } }); // Запуск всех потоков long startTime = System.currentTimeMillis(); palindromeThread.start(); sameLetterThread.start(); ascendingThread.start(); // Ожидание завершения всех потоков palindromeThread.join(); sameLetterThread.join(); ascendingThread.join(); long endTime = System.currentTimeMillis(); // Вывод результатов System.out.println("Красивых слов с длиной 3: " + countLength3.get() + " шт"); System.out.println("Красивых слов с длиной 4: " + countLength4.get() + " шт"); System.out.println("Красивых слов с длиной 5: " + countLength5.get() + " шт"); System.out.println("Время выполнения: " + (endTime - startTime) + " мс"); } }