Thursday, July 12, 2012

Java Практика - Занятие 5

На пятом занятии я решил остановиться на использовании коллекций, как альтернативу применению массивов для хранения наборов данных. Интерфейсы коллекций в Java обеспечивают весь необходимый инструментарий для работы с различными наборами данных, поэтому их употребление, во-первых, повышает скорость разработки программ, а во-вторых, улучшает качество кода за счет повторного использования уже написанного и отлаженного кода. Про коллекции я рассказывал на уроке 10 в курсе Java для тестировщиков. Так как применение коллекций упрощает разбираемый пример, я немного усложнил логику приложения, чтобы сделать ее более интересной. В дополнению к работе над разбираемой задачей в конце занятия было поставлено одна интересная задача для самостоятельной работы.

На этом занятии мы рассмотрели не все интерфейсы коллекций и возможные варианты их использования. Это еще предстоит в будущем. Пока что мы остановились только на интерфейсах Collection, List, Map. Также рассмотрели использование итератора для прохождения коллекции и возможного удаления элементов.

Домашнее задание для этого занятия:
  1. Добавить Map продуктов в класс Deal 
  2. Изменить методы getCost() и getSum(), чтобы они работали, используя Map продуктов. 
  3. Добавить Map свойств в Party вместо массивов keys и value. 
  4. Исправить методы ввода/вывода для работы с Map 
  5. Добавить возможность выбирать ранее введенный продукт при добавлении его в сделку.
Дополнительная задача для развития навыков программирования:
Написать программу, которая заполняет матрицу (двумерный массив) нулями и единицами так, чтобы получился рисунок песочных часов. Матрица обязательно квадратная. Размер матрицы пользователь вводит с консоли.
Например, для матрицы, размером 5х5, должен получиться такой рисунок:
1 1 1 1 1
0 1 1 1 0
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
Я также написал возможное решение этой задачи, если вдруг кому-то будет очень сложно. Скачать исходные файлы можно тут: JavaPractice05.zip (5,9 KB)

Чтобы откомпилировать и запустить этот пример, выполните следующие команды:
cd <каталог_куда_распаковали_архив>
cd src
javac *.java
java Program5 - это для запуска программы о сделках
java Program5Additional - это для запуска песочных часов 
Также, если Вы уже умеете работать со средой разработки Eclipse, то можете импортировать этот проект в нее и запустить. 


Ну и, собственно, видео занятия:

10 comments:

Anonymous said...

Спасибо за курс! Учу Java вместе с Вами. Разбирая последний урок, я увидела, что inputDeal() не учитывает при выборе продукта (selectProduct) количество продукта введенное ранее, а просто перезаписывает предыдущее значение новым, поэтому итоговое к-во продуктов и цена, получаются не совсем правильными :)

Сергей said...

Здравствуйте Юрий,

Хотел бы поблагодарить вас за отличнейший видеокурс посвященный различным Java (и не только Java) технологиям. Супер! то что нужно! ненапряжно и с программерским юмором:) Так держать!:)

Вот такая мысль: за последние лет 10 расплодилось много различных Java фреймворков и библиотек. Я как раз недавно решил для всех них создать отдельный док и заносить по ним инфу потихонечку. Не хотели бы вы сделать некий обзор что-ли (ну не всех естесественно, а самых-самых), что они представляют и с чем их едят, как они связаны между собой, тенденции и т.п. и т.д. К сожалению русскоязычной инфы по этому всему очень мало, а хочется идти в ногу со временем...

И вот такой еще философский вопрос. Считаете ли вы, что за последние десять лет разработка софта (а в частности для Java) сделала серьезный скачок в своем развитии? Ну пусть "серебрянную пулю" по Бруксу еще не нашли, но все таки...

Unknown said...

Спасибо Вам, Юрий, за ваши уроки!
Пересмотрел все практики и уже больше половины "Java для тестировщиков" и чувствую, что знаний у меня прибавилось!
Очень хорошо, что Вы даете задание, это помогает на практике закрепить изученный материал!
С нетерпением жду продолжения Вашего видео курса!

Anonymous said...

А когда будет 6-й урок?

Anonymous said...

Добрый день. Спасибо за уроки. Забегая вперед вопрос по SQL. Из предыдущих лекций Java для тестировщика:

Есть запрос:
“select * from user where u.id=:id”.

Хочу вставить значение id:
st.setInteger( “id”, 5); // Это не работает:(

Может я что-то не так понял в PreparedStatement?

Yuriy said...

To ppn2011:
По-моему там надо писать в запросе "select * from user u where u.id=:id".
И неплохо было бы уточнить, что именно не работает: не устанаваливается значение, не выполняется запрос, эксепшин бросается или что? :)

Unknown said...

Большое спасибо за уроки.
Правда по последнему заданию,у меня алгоритм вышел кривой,но работает.
Позже,посмотрел ваще исполнение "песочных часов", оказалось все не так,как у меня=(

Anonymous said...

В методе inputDeal() в блоке do{} продукт и его количество вносится в map. Когда пользователь выбирает уже существующий продукт, он, тем самым, дублирует ключ в мапе. Итог - значение пишется поверх, хотя, задумывалось, что он просто увеличит количество.
Сижу думаю пока )

Unknown said...

Здравствуйте, Юрий.

Изучаю Java не без помощи ваших видео, понравилась задача с песочными часами, реализовал, но немного с другим алгоритмом:

private void fill() {

for (int i = 0, k = 0, l = size; i <= (size - 1) / 2; i++, k++, l--) {
for (int j = k; j < l; j++) {
array[i][j] = 1;
}
}

for (int i = size - 1, k = 0, l = size; i > (size - 1) / 2; i--, k++, l--) {
for (int j = k; j < l; j++) {
array[i][j] = 1;
}
}
}

Unknown said...

куда подойти на тестирование на джава-трейни?
private static void fillSandClock(){
for(int i=0;i<=matrix.length/2;i++){
for(int j=i;j<=matrix.length/2;j++){
matrix[i][j]=1;
matrix[i][matrix.length-1-j]=1;
matrix[matrix.length-1-i][j]=1;
matrix[matrix.length-1-i][matrix.length-1-j]=1;
}
}
}

(конечно, есть немного оверхеда - при нечетном размере дважды пробегает по центру, но все-равно получается почти в 4 раза меньше бегать, чем полным пробегом)