мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияСледующая версияСледующая версия справа и слева | ||
java:basics [20/10/2014 11:45] – ybezrukov | java:basics [19/01/2015 09:22] – ybezrukov | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Урок 1 ====== | + | ====== Первый семестр ====== |
+ | |||
+ | |||
+ | |||
+ | ===== Урок 1 ===== | ||
===== Начало работы ===== | ===== Начало работы ===== | ||
Строка 820: | Строка 825: | ||
- Список соответствия преподавателя предмету (один преподаватель может вести несколько предметов) | - Список соответствия преподавателя предмету (один преподаватель может вести несколько предметов) | ||
- Написать методы: | - Написать методы: | ||
- | - Вывести список преподавателей с теми предметами, | + | - Вывести список преподавателей с теми предметами, |
- | <pre>имя преподавателя предмет1, | + | - Вывести список предметов |
- | - Вывести список предметов | + | |
- | предмет имя преподавателя | + | |
- Вывести преподавателя с наибольшим количеством предметов | - Вывести преподавателя с наибольшим количеством предметов | ||
+ | |||
+ | <code java> | ||
+ | HashMap< | ||
+ | // где-то тут заполняется карта teachers | ||
+ | Iterator it = teachers.entrySet().iterator(); | ||
+ | while (it.hasNext()) { | ||
+ | Map.Entry pairs = (Map.Entry)it.next(); | ||
+ | System.out.println(pairs.getKey() + " = " + pairs.getValue()); | ||
+ | it.remove(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Итоговая контрольная работа ===== | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ==== Второй семестр ==== | ||
+ | |||
+ | ===== Задание 1. Тур де Франс ===== | ||
+ | |||
+ | Наша задача состоит в том, чтобы написать красивую объектно-ориентированную программу, | ||
+ | |||
+ | Файл 1. tdf14_teams.txt | ||
+ | |||
+ | В нем перечислены участники и команды. В каждой строке файла хранится запись вида: | ||
+ | |||
+ | < | ||
+ | национальность фамилия имя год_рождения номер команда | ||
+ | </ | ||
+ | |||
+ | Например | ||
+ | |||
+ | < | ||
+ | SUI ALBASINI Michael 1980 182 ORICA GREENEDGE | ||
+ | </ | ||
+ | |||
+ | Каждый участник однозначно идентифицируется по своему имени, а команда по названию (т.е. дубликатов нет) | ||
+ | |||
+ | Файл 2. tdf14_stage.txt | ||
+ | |||
+ | В нем перечислены этапы гонки в виде: | ||
+ | |||
+ | < | ||
+ | номер_этапа дата место_отправления место_прибытия дистанция | ||
+ | </ | ||
+ | |||
+ | Например | ||
+ | |||
+ | < | ||
+ | 1 05/07/14 Leeds Harrogate 190 | ||
+ | </ | ||
+ | |||
+ | Файл 3. tdf14_ranks.txt | ||
+ | |||
+ | В этом файле содержатся рейтинги участников на разных этапах. Каждая строка содержит следующее: | ||
+ | |||
+ | < | ||
+ | Номер_этапа место_участника номер_участника время_участника | ||
+ | </ | ||
+ | |||
+ | Участники, | ||
+ | |||
+ | Класс-обертка для чтения из файла прилагается. | ||
+ | |||
+ | <code java> | ||
+ | import java.io.*; | ||
+ | |||
+ | public class ReadData { | ||
+ | private BufferedReader reader; // читатель из файла | ||
+ | |||
+ | /** | ||
+ | * Конструктор. | ||
+ | */ | ||
+ | public ReadData() { | ||
+ | reader = null; | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * открывает текстовый файл | ||
+ | * @param fileName имя файла | ||
+ | * @return true если открыли успешно, | ||
+ | */ | ||
+ | public boolean open(String fileName) { | ||
+ | try { | ||
+ | FileReader fr = new FileReader(fileName); | ||
+ | reader = new BufferedReader(fr); | ||
+ | return true; | ||
+ | } | ||
+ | catch(IOException ex) { | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Читает строку из файла, открытого методом open() | ||
+ | * @return прочитанная строка или null, если прочитать не удалось | ||
+ | */ | ||
+ | public String readLine() { | ||
+ | try { | ||
+ | return reader.readLine(); | ||
+ | } | ||
+ | catch(IOException ex) { | ||
+ | return null; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Закрывает файл | ||
+ | */ | ||
+ | public void close() { | ||
+ | if (reader != null) { | ||
+ | try { | ||
+ | reader.close(); | ||
+ | } | ||
+ | catch(IOException ex) { | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Работа делится на две части. Первая заключается в создании системы классов и объектов для представления данных и начальном заполнении их информацией из файла. Вторая в статистической обработке данных. | ||
+ | |||
+ | Часть 1. | ||
+ | |||
+ | Наша задача состоит в обработке файла tdf14_teams.txt. Для этого требуется создать следующие 4 класса. | ||
+ | |||
+ | 1. Racer. У нашего участника есть имя, фамилия, | ||
+ | 2. Team. Команда имеет название и список участников. Должны быть реализованы следующие методы: | ||
+ | - Team(String name) конструктор, | ||
+ | - void insert(Racer racer) добавляет гонщика в команду | ||
+ | - String getName() геттер для названия команды | ||
+ | - int numberOfRacers() возвращает количество гонщиков в команде | ||
+ | - Racer getRacers(int i) возвращает гонщика по номеру. Нумерация идет с нуля. | ||
+ | - int totalAge(int year) возвращает суммарный возраст участников. Год передается в качестве параметра. | ||
+ | 3. TeamsList. Класс для списка команд. Должны быть реализованы следующие методы: | ||
+ | - TeamsList() конструктор, | ||
+ | - void insert(Team team) добавляет команду в общий список. | ||
+ | - Team getTeam(String teamName) возвращает команду по ее названию. Если такой команды не найдено, | ||
+ | - int numberOfTeams() возвращает количество команд | ||
+ | - Team getTeam(int i) возвращает i-ю команду. Нумерация с нуля. | ||
+ | 4. TourDeFrance главный класс программы, | ||
+ | |||
+ | <code java> | ||
+ | |||
+ | public class TourDeFrance { | ||
+ | /** | ||
+ | * Метод для создания гонщика, | ||
+ | * @param line одна строка из файла | ||
+ | * @param teamsList список команд, | ||
+ | */ | ||
+ | public static void parceTeamLine(String line, ListeEquipe teamsList) { | ||
+ | // Элементы в строках нашего файла разделени знаками табуляции, | ||
+ | // и будем использовать чтобы отличить один элемет от другого. | ||
+ | String[] elem = line.split(" | ||
+ | |||
+ | // Информация о гонщике | ||
+ | String nat = elem[0]; | ||
+ | String racerFamilyName = elem[1]; | ||
+ | String racerName = elem[2]; | ||
+ | int year = Integer.parseInt(elem[3]); | ||
+ | int number = Integer.parseInt(elem[4]); | ||
+ | String teamName = elem[5]; | ||
+ | |||
+ | // TODO Найти команду по имени в списке | ||
+ | // TODO Если не найдено, | ||
+ | // TODO Создать гонщика и добавить в команду | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Метод для создания команд | ||
+ | * @param | ||
+ | * @param | ||
+ | * @return если чтение данных прошло успешно, | ||
+ | * | ||
+ | * В противном случае возвращается false | ||
+ | */ | ||
+ | public static boolean createTeams(String fileName, ListeEquipe teamsList) { | ||
+ | // Объект, | ||
+ | ReadData reader = new ReadData(); | ||
+ | |||
+ | if (reader.open(fileName)) { | ||
+ | // Пропустим заголовок | ||
+ | String line = reader.readLine(); | ||
+ | |||
+ | // Обработаем строку для добавления в список | ||
+ | while ((line = reader.readLine()) != null) { | ||
+ | parceTeamLine(line, | ||
+ | } | ||
+ | reader.close(); | ||
+ | return true; // все прошло хорошо | ||
+ | } | ||
+ | else { | ||
+ | return false; // или плохо | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Главный метод | ||
+ | * @param args аргументы командной строки | ||
+ | */ | ||
+ | public static void main(String[] args) { | ||
+ | final int currentYear = 2014; | ||
+ | final String teamsFileName = " | ||
+ | |||
+ | // TODO Создать список команд (и инициализировать!) | ||
+ | |||
+ | // Обработка файла с командами | ||
+ | boolean res = createTeams(teamsFileName, | ||
+ | if (!res) { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | else { | ||
+ | // TODO Оставшаяся часть программы (вывести данные, | ||
+ | // вычислить средний возраст участников и т.д. | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ |