Advertisement
VastMind

Untitled

May 24th, 2018
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.67 KB | None | 0 0
  1. /*
  2. 3. Небходимо создать консольное приложение, осуществляющее генерацию
  3. случайного текста в размере не менее чем 100 строк.
  4. Все "слова" текста составляются программой автоматически из случайно выбранных букв.
  5. После создания текста программа осуществляет поиск в тексте слов
  6. палиндромов (то есть таких слов, которые Одинаково читают слева —
  7. направо и справа-налево), заполняет этими словами массив и распечатывает
  8. на экране исходный текст и найденные палиндромы. Для простоты размер
  9. всех "слов" взять одинаковым. Размер слова" Задается пользователем путем
  10. ввода с клавиатуры.
  11. */
  12.  
  13. import java.util.*;
  14.  
  15. public class Palindrom {
  16.  
  17.     public static void main(String[] args) {
  18.         // Класс сканер для возможности ввода из консоли
  19.         Scanner scanner = new Scanner(System.in);
  20.  
  21.         int value = -1;
  22.         // Ввод выполняется в цикле, пока не будет введено корректное значение
  23.         while (value <= 0) {
  24.             try {
  25.                 System.out.println("Введите длину слова, положительное целое число:");
  26.                 value = scanner.nextInt();
  27.  
  28.                 // Не менее 100 слов
  29.                 Random random = new Random();
  30.  
  31.                 //Вернет случайное целое число от 30 до 100 - Переменное количество сгенерированных слов
  32.                 int wordsCount = 30 + random.nextInt(101 - 30);
  33.  
  34.                 String[] randomStrings = new String[wordsCount];
  35.                 // Поскольку размер массива неизвестен - используем список, чтобы динамически добалять элементы
  36.                 ArrayList<String> palindromeList = new ArrayList();
  37.                 for (int i = 0; i < wordsCount; i++) {
  38.                     randomStrings[i] = new String(generateOneWord(value));
  39.                     // Можно раскомментировать и использовать готовый метод реверса строки для нахождения палиндрома
  40.                     //if (isPalindrome(randomStrings[i])) palindromeList.add(randomStrings[i]);
  41.                     if (isPalindrome2(randomStrings[i])) palindromeList.add(randomStrings[i]);
  42.                 }
  43.  
  44.                 System.out.println("Исходный программно сгенерированный текст: " + Arrays.toString(randomStrings));
  45.                 System.out.println("-----------------------------------------------------------------------------");
  46.                 System.out.print("Массив найденных палиндромов: ");
  47.  
  48.                 // Получить массив строк по условию задачи
  49.                 String[] palindromeArray = new String[palindromeList.size()];
  50.                 for (int i = 0; i < palindromeList.size(); i++) {
  51.                     palindromeArray[i] = palindromeList.get(i);
  52.                     System.out.print(palindromeArray[i] + " ");
  53.                 }
  54.                 System.out.println();
  55.  
  56.                 if (!palindromeList.isEmpty()) {
  57.  
  58.                     for (String s : palindromeList)
  59.                         System.out.println(s + " - Найденный полиндром" );
  60.  
  61.                 } else
  62.                     System.out.println("Палиндромов в тексте не найдено");
  63.  
  64.  
  65.                 // Обработка искл. ситуации если введено неправильное значение - например символ или меньше либо равно 0
  66.             }catch (InputMismatchException ime) {
  67.                 System.err.println("Неверное значение.");
  68.                 scanner.nextLine();
  69.             }
  70.  
  71.         }
  72.     }
  73.  
  74.     // Метод нахождения палиндрома
  75.     public static Boolean isPalindrome(String s) {
  76.         return s.equals((new StringBuilder(s)).reverse().toString());
  77.     }
  78.  
  79.     // метод нахождения палиндрома путем реверса строки через XOR
  80.     public static Boolean isPalindrome2(String s) {
  81.         char[] array = s.toCharArray();
  82.         int length = array.length;
  83.         int half = (int) Math.floor(array.length / 2);
  84.         for (int i = 0; i < half; i++) {
  85.             array[i] ^= array[length - i - 1];
  86.             array[length - i - 1] ^= array[i];
  87.             array[i] ^= array[length - i - 1];
  88.         }
  89.         return s.equals((new String(String.valueOf(array))));
  90.     }
  91.  
  92.     // Генератор слова из букв
  93.     public static String generateOneWord(int numberOfChars) {
  94.         String chars = "АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩ";
  95.         StringBuilder generated = new StringBuilder();
  96.         Random rnd = new Random();
  97.         while (generated.length() < numberOfChars) {
  98.             int index = (int) (rnd.nextFloat() * chars.length());
  99.             generated.append(chars.charAt(index));
  100.         }
  101.         String result = generated.toString();
  102.         //System.out.println(result);
  103.         return result;
  104.     }
  105.  
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement