17 June, 2014

Итоги 4 и 5 занятий

На четвертом и пятом занятиях рассмотрены основные принципы ООП.
Детально прошлись по инкапсуляции
Кратко рассмотрели пакеты и путь поиска классов (classpath).

К прочтению рекомендуется вся 4-я глава Хорстманна
В конце этой главы приводится подробная информация по пакетам, classpath, и встроенной возможности документирования - эта часть рекомендуется к самостоятельному изучению.

В качестве примера рассмотрели задачу о Ханойской башне

Для решения задачи логика программы разделена на два модуля - игрок и игра.
Вначале игрок создает новый экземпляр игры с указанием количества дисков в башне.
Игра предоставляет игроку возможность переместить диск с одного стержня на другой - метод move(), в аргументы которого передается имя диска-источника, и имя диска назначения.
Игрок, выполняя последовательные вызовы метода move(), перемещает башню с водного стержня на другой.

На занятии рассмотрели реализацию игры - класс Tower

Домашнее задание

Расширить логику класса Tower. Реализовать проверку правил игры - больший диск нельзя класть на меньший, с пустого стержня нельзя пытаться снять диск.
При попытке пользователя выполнить неправильное действие, нужно вывести на экран сообщение об ошибке.

Так как для реализации этой логики потребуется производить множество одинаковых проверок для каждого стержня, то следует всю логику, относящуюся к стержню, вынести в отдельный класс - Rod.
Стержень предоставляет для игры возможность поместить на стержень диск, и снять диск со стержня. Соответственно - метод putDisc, в аргумент метода передается размер диска, и takeOffDisc - не принимает аргументов, возвращает размер снятого диска.
При инициализации, игра создает три экземпляра класса Rod, и один из них наполняет дисками.
При вызове игроком метода move, игра должна снять диск с одного стержня и поместить его на другой.

Диаграмма классов:

Как вариант - реализовать в методах putDisc и takeOffDisc возврат кода ошибки, в случае неудачного помещения или снятия диска.

Реализовать логику игрока - запросить у пользователя высоту башни, и вывести трассировку решения задачи для указанной высоты.

15 June, 2014

Регулярные выражения

Я рекомендую самостоятельно разобраться с регулярными варыжениями. Не обязательно выучивать наизусть все подстановочные символы, достаточно понять основные принципы.

Начать можно с Хорстманна, у него регулярки описаны во втором томе в конце первой главы. Несмотря на то что он вынес их во второй том, изучать их можно совершенно независимо от остального материала.

Помимо Хорстманна есть еще оффициальный туториал - Regular Expressions (англ.)
Вся справочная информация по классам пакета java.util.regex - http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
Например - класс Pattern с описанием всех подстановочных символов.

10 June, 2014

Дискретная математика

Для желающих параллельно изучить дискретку рекомендую книжку Андерсона - "Дискретная математика и комбинаторика"


Андерсон, Джеймс А. Дискретная математика и комбинаторика. 2004 год. 960 стр. 8.1 Мб.
Книга представляет собой современный учебник по дискретной математике. Кроме таких разделов, как математическая логика, теория множеств, комбинаторика, теория графов, теория алгоритмов и вычислений, традиционно включаемых в основной курс дискретной математики, она содержит обширные сведения по теории вероятностей, алгебре и теории чисел. Особое внимание уделено теории доказательств. Чтение книги требует некоторой математической культуры, хотя для изучения основных глав достаточно знаний по математике в объеме средней школы. Материал сопровождается многочисленными примерами, в конце каждого раздела приводится большое количество упражнений. Книга адресована в первую очередь преподавателям и студентам технических специальностей. Она будет также полезна тем, кто интересуется дискретной математикой и желает изучить ее самостоятельно.

Требования к выполнению домашек

Выполненные задания можете присылать мне на почту для проверки.

Первые задания могут быть реализованы одним классом, в одном методе, поэтому текст программы можно вставлять в тело письма. Программы со множеством классов следует паковать в архив.

Если вы вставляете в текст письма часть или полный текст программы, то позаботьтесь о форматировании, куски программ следует оформлять моноширным шрифтом (например Courier New или Consolas). Для удобства копирования и вставки кусков кода можно использовать плагин к IDEA - 'Copy' on steroids

Прошу обратить внимание на форматирование текста программы. Программы без отступов, или с отступами в случайном порядке, рассматриваться не будут.

Также прошу перед отсылкой убирать из текста закомментированные куски кода.

В некоторых заданиях есть требования к проверке введенных пользователем данных, относитесь к этому пункту серьезно - ваша программа не должна падать с исключением от некорректных действий пользователя, следует предусмотреть все возможные варианты ввода и обработать их.

09 June, 2014

Итоги первых трех занятий

Темы, рассмотренные на первых трех занятиях


Установка JDK и IntelliJ IDEA
Примитивные типы данных
Операции
Массивы
Блоки операций
Условные операторы if...else, if...else...if, switch
Циклы while, do...while, for, foreach
Ввод-вывод

Рекомендуется к прочтению 1-3 главы Хорстманна.
Все дальнейшие отсылки на Хорстманна будут относиться к 9-му изданию 2014 года.


Домашка

  1. Генератор простых чисел.

    Программа запрашивает у пользователя верхний предел, после ввода, программа должна вывести на экран все простые числа в диапазоне от 0 до верхнего предела.

    Необходимо обрабатывать ввод некорректных данных, и запрашивать у пользователя корректные.
  2. Детектор палиндромов.

    Программа запрашивает у пользователя слово или выражение. Если введенное слово или выражение является палиндромом, то программа выводит "это палиндром", в противном случае "это не палиндром"

    После проверки палиндрома программа должна запрашивать от пользователя новый палиндром, и так пока пользователь не введет exit.
  3. Текстовый фильтр.

    Программа принимает на вход слово-фильтр, и путь к текстовому файлу, который требуется отфильтровать. (Входные данные можно передавать как параметры командной строки, описано у Хорстманна на стр. 120, или запрашивать у пользователя в интерактивном режиме через сканнер)
    Программа построчно читает файл, проверяет есть ли в строке слово-фольтр, если есть - программа выводит строку на экран, иначе программа переходит к следующей строке.
  4. Сортировка текстового файла

    Программа принимает на вход путь к файлу содержимое которого нужно отсортировать. (как параметр командной строки, или через сканнер)

    Программа сравнивает все прочитанные из файла строки и выводит их на экран в отсортированном в алфавитном порядке виде.

    Следует использовать небольшие файлы, на несколько десятков строк.
  5. Калькулятор

    Программа запрашивает у пользователя простое математическое выражение, вычисляет выражение, выводит результат.

    По желанию реализовать один из вариантов.

    Попроще - программа запрашивает по очереди первый операнд, второй операнд и операцию.

    Посложнее - выражение с двумя операндами вводится одной строкой в традиционном виде, например 2 + 2 (операторы и операнд отделяются пробелом).

    Следует обрабатывать ввод нечисловых значений, и запрашивать повторный ввод.
Для некоторых заданий протребуются функции работы со строками, сравнение, проверка вхождения подстроки и т.п. Об этом нужно почитать у Хорстманна на стр. 77-83

Возникшие вопросы присылайте на мою почту или оставляйте здесь в комментариях

UPD.
Инициализация Scanner для чтения файла, и PrintStream для записи в файл может быть еще проще:
Scanner fileIn = new Scanner(new File("c:\\filein.txt"));
PrintStream fileOut = new PrintStream("c:\\fileout.txt");

Не забываем про throws IOException при работе с файлами

public static void main(String[] args) throws IOException {

И не забываем импортировать классы:
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

Июнь 2014, Начинаем курс по Java Elementary

Рекомендуемая литература:


Java 2. Кей Хорстманн, Гари Корнелл. 8-е (том 1) или 9-е издание (том 1, том 2).
Core Java. Cay S. Horstmann, Gary Cornell. 8-th (vol.1, vol.2) or 9-th edition.

Философия Java. Брюс Эккель. 4-е издание
Thinking in Java. Bruce Eckel. 4-th edition

Java 2. Наиболее полное руководство. Герберт Шилдт 7-е издание, 8-е издание,

Документация:

The Java™ Tutorials
Java API - http://docs.oracle.com/javase/7/docs/api/