1. Задача о високосном годе (см. python)
  2. Задача о котах (см. python)
  3. Задача о квадратном уравнении (см. python)
  4. Дано число, проверить его на простоту.
    • можете просто перебрать делители числа \(n\) от 2 до \(n - 1\)
    • или можете оптимизировать, перебирая только до квадратного корня
  5. Сайт codingbat.com. Зарегистрируйтесь на нем и решите по две задачи из следующих разделов Java: Warmup, String, Array, Logic. Решайте в любом порядке, и решайте все степени трудности, от 1 до 3.
  6. Массивы. Реализуйте указанные функции:
    1. Дано n, верните массив из первых n четных чисел: 2 4 6 8 … 2n
    2. Дан массив, функция проверяет, есть ли в массиве одинаковые элементы: boolean hasSimilar(int[] a)
    3. Дан массив, верните среднее значение всех элементов массива. (т.е. сумму элементов, деленную на количество элементов)
    4. Дан массив, верните дисперсию всех элементов массива. (это среднее значение элементов массива, возведенных в квадрат, минус среднее значение элементов массива, возведенное в квадрат)
    5. Остортируйте массив по убыванию: private static int[] sortReverse(int[] a). Используйте для этого Arrays.sort() с одним аргументом. Содержимое исходного массива меняться не должно, нужно вернуть новый отсортированный массив. Пример:
       int[] x = {20, 10, 30};
       int[] y = sortReverse(x);
       System.out.println(Arrays.toString(x)); // печатает 20 10 30
       System.out.println(Arrays.toString(y)); // печатает 30 20 10
      
  7. Чтение и запись в файлы
    1. Дан файл. Прочитайте из него все целые числа и выведите на экран их сумму.
      • Измените метод так, чтобы он игнорировал все слова, которые не являются целыми числами. (используйте hasNextInt(), не используйте scanner.useDelimiter()).
    2. Дан массив строк lines и имя файла. Запишите в файл заданные строки построчно. Не забудьте, что есть цикл “for each”.
    3. Даны два файла. Прочитайте из первого файла текст и перепишите его во второй файл, исправив ошибки в регистрах букв Например, если исходный текст был:

       какой-то Текст с неправильными   Регистрами букв!  втОРОе предложение Этого текста.
      

      то должно получиться:

       Какой-то текст с неправильными регистрами букв! Второе предложение этого текста.
      

      Вы должны читать исходный файл по словам, разделенными пробельными символами, следить за последним символом очередного слова. Если это символ конца предложения (точка, восклицательный знак, вопросительный знак), нужно сделать так, чтобы следующее слово начиналось с заглавной буквы. Иначе следующее слово должно начинаться со строчной буквы. Заглавные буквы внутри слов нужно изменить на строчные.

  8. Двумерные массивы. Заставьте следующий код работать:
         char[][] c = createTable(20, '.');
         printTable(c);
    
         System.out.println("============ Заполним строки: ==========");
         fillFirstAndLastLines(c, '#');
         printTable(c);
    
         System.out.println("============ Заполним столбцы: =========");
         fillFirstAndLastColumns(c, '#');
         printTable(c);
    
    1. createTable возвращает массив char 20 на 20, все символы в массиве должны быть ‘.’
    2. printTable печатает массив на экран. При этом выводите символы подряд, без запятых. Можете вывести пробелы между символами, так получается более красиво.
    3. fillFirstAndLastLines Воспользуйтесь Arrays.fill(), чтобы заполнить первую и последнюю строки массива символами ‘#’.
    4. fillFirstAndLastColumns Заполните первый и последний столбец массива символами ‘#’.
  9. Регулярные выражения.
    1. Дана строка, проверьте, что в ней содержится корректный email адрес. Будем считать, что корректный email состоит из имени пользователя (несколько латинских букв, точек, подчеркиваний, минусов), далее следует символ @, далее идет домен (тоже несколько латинских букв, точек, подчеркиваний, минусов), в конце должна быть точка и от двух до четырех латинских букв. Т.е. конец должен выглядеть как .com, .ru и т.п. Помните, что обычная точка означает любой символ, и ее может понадобиться экранировать. Используйте метод matches() класса String
    2. Дана строка с текстом на русском языке, в которой автор неправильно расставил пробелы перед запятыми. Например, Это строка , у которой зачем-то написаны два пробела перед запятой. Нужно найти все пробельные символы перед запятыми и удалить их. Должно получиться Это строка, у которой зачем-то написаны два пробела перед запятой. Используйте метод replaceAll() класса String.
    3. Дана строка. Найдите в ней все слова, написанные через дефис и поменяйте две половинки этих слов местами. Например, строка “Какая-то сине-зеленовая трава” должна превратиться в “то-Какая зеленовая-сине трава”. Используйте метод replaceAll класса String и $ для ссылки на группы.
    4. Дана строка. Посчитайте, сколько раз в ней встречаются символы “кот”, в произвольном регистре. Т.е. Кот и КОТ тоже надо считать. Используйте Matcher с методом find(). При создании регулярного выражения с помощью класса Pattern установите режимы Pattern.UNICODE_CASE и Pattern.CASE_INSENSITIVE.

      • Необязательное задание. А если надо искать слово “кот”, т.е. не считать, например, слово “который”? Попробуйте два способа указать, что “кот” должно быть частью другого слова. 1) найдите на странице с лекцией ссылку на все возможности регулярных выражений в Java, и там найдите, как указать word boundaries 2) используйте конструкции наподобие (\s|$) - это означает либо пробельный символ, либо конец строки.