мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Последняя версияСледующая версия справа и слева
java:basics [01/12/2014 09:39] ybezrukovjava:basics [19/01/2015 09:22] ybezrukov
Строка 1: Строка 1:
 +[[Первый семестр]]
  
-====== Урок 1 ====== +[[Второй семестр]] 
-===== Начало работы =====+ 
 + 
 +====== Первый семестр ====== 
 + 
 + 
 + 
 +===== Урок 1 ===== 
 + 
 +==== Начало работы ====
  
   - Запустите Eclipse   - Запустите Eclipse
Строка 837: Строка 846:
 ===== Итоговая контрольная работа ===== ===== Итоговая контрольная работа =====
  
-[[https://drive.google.com/file/d/0B88BcoMr40VIb1FvaW9nY3YtZUk/view?usp=sharing|Задания]]+[[https://drive.google.com/file/d/0B88BcoMr40VINTJIX1VuSlAxSTA/view?usp=sharing|Задание]] 
 + 
 +==== Второй семестр ==== 
 + 
 +===== Задание 1. Тур де Франс ===== 
 + 
 +Наша задача состоит в том, чтобы написать красивую объектно-ориентированную программу, которая будет заниматься обработкой данных результатов велогонки Тур де Франс. Данные гонки хранятся в трех текстовых файлах. 
 + 
 +Файл 1. tdf14_teams.txt 
 + 
 +В нем перечислены участники и команды. В каждой строке файла хранится запись вида: 
 + 
 +<code> 
 +национальность фамилия имя год_рождения номер команда 
 +</code> 
 + 
 +Например 
 + 
 +<code> 
 +SUI ALBASINI Michael 1980 182 ORICA GREENEDGE 
 +</code> 
 + 
 +Каждый участник однозначно идентифицируется по своему имени, а команда по названию (т.е. дубликатов нет) 
 + 
 +Файл 2. tdf14_stage.txt 
 + 
 +В нем перечислены этапы гонки в виде: 
 + 
 +<code> 
 +номер_этапа дата место_отправления место_прибытия дистанция 
 +</code> 
 + 
 +Например 
 + 
 +<code> 
 +1 05/07/14 Leeds Harrogate 190 
 +</code> 
 + 
 +Файл 3. tdf14_ranks.txt 
 + 
 +В этом файле содержатся рейтинги участников на разных этапах. Каждая строка содержит следующее: 
 + 
 +<code> 
 +Номер_этапа место_участника номер_участника время_участника 
 +</code> 
 + 
 +Участники, сошедшие с дистанции во время этапа с номером i, где (1 ≤ i ≤ 21) исключены из рейтингов для всех последующих этапов. 
 + 
 +Класс-обертка для чтения из файла прилагается. 
 + 
 +<code java> 
 +import java.io.*; 
 + 
 +public class ReadData { 
 + private BufferedReader reader; // читатель из файла 
 + 
 + /** 
 + * Конструктор. 
 + */ 
 + public ReadData() { 
 + reader = null; 
 +
 + 
 + /** 
 + * открывает текстовый файл 
 + * @param fileName имя файла 
 + * @return true если открыли успешно, false иначе. 
 + */ 
 + 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) { 
 +
 +
 +
 +
 + 
 +</code> 
 + 
 +Работа делится на две части. Первая заключается в создании системы классов и объектов для представления данных и начальном заполнении их информацией из файла. Вторая в статистической обработке данных. 
 + 
 +Часть 1. 
 + 
 +Наша задача состоит в обработке файла tdf14_teams.txt. Для этого требуется создать следующие 4 класса. 
 + 
 +1. Racer. У нашего участника есть имя, фамилия, национальность, год рождения и номер участия. В классе должны быть необходимые геттеры и сеттеры, а так же метод int age(int year), который позволяет вычислить возраст участника, год передается в качестве параметра (например 2014) 
 +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) возвращает команду по ее названию. Если такой команды не найдено, должен возвращаться null. 
 +- int numberOfTeams() возвращает количество команд 
 +- Team getTeam(int i) возвращает i-ю команду. Нумерация с нуля. 
 +4. TourDeFrance главный класс программы, содержащий метод main. В этом классе должны выполнятся вызовы методов для чтения данных о велосипедистах, создаваться необходимые объекты (участники, команды, список команд), показываться информация о командах и их участниках. После чтения данных и заполнения объектов нужно ответить на вопрос: каков средний возраст участников Тур де Франс 2014. Ответ округлить до двух знаков после запятой. Набросок для этого класса приведен далее. 
 + 
 +<code java> 
 + 
 +public class TourDeFrance { 
 + /** 
 + * Метод для создания гонщика, на основани файла с списком гонщиков/команд 
 + * @param line одна строка из файла 
 + * @param teamsList список команд, который заполняется на основании строки из файла 
 + */ 
 + public static void parceTeamLine(String line, ListeEquipe teamsList) { 
 + // Элементы в строках нашего файла разделени знаками табуляции, их мы 
 + // и будем использовать чтобы отличить один элемет от другого.  
 + String[elem = line.split("\t"); 
 + 
 + // Информация о гонщике 
 + 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  fileName Имя файла для команд 
 + * @param  teamsList список команд 
 + * @return если чтение данных прошло успешно, то возвращается true (это значит, 
 + *    что все команды/участники прочитаны и занесены в список) 
 + *    В противном случае возвращается 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, teamsList); 
 +
 + reader.close(); 
 + return true; // все прошло хорошо 
 +
 + else { 
 + return false; // или плохо 
 +
 +
 + 
 + /** 
 + * Главный метод  
 + * @param args аргументы командной строки 
 + */ 
 + public static void main(String[] args) { 
 + final int currentYear = 2014; 
 + final String teamsFileName = "tdf14_teams.txt"; 
 + 
 + // TODO Создать список команд (и инициализировать!) 
 + 
 + // Обработка файла с командами 
 + boolean res = createTeams(teamsFileName, temsList); 
 + if (!res) { 
 + System.out.println("Произошла ошибка с чтением списка команд"); 
 +
 + else { 
 + // TODO Оставшаяся часть программы (вывести данные, чтобы удостовериться в корректном чтении файла, 
 + // вычислить средний возраст участников и т.д. 
 +
 +
 +
 + 
 +</code>