мета-данные страницы
Это старая версия документа!
Первый семестр
Урок 1
Начало работы
- Запустите Eclipse
- Создайте новый проект (Правой кнопкой по левой вкладке Package Explorer, New, Project)
- Создайте новый пакет (Правой кнопкой по имени проекта New, Package)
- Создайте новый класс (Правой кнопкой по имени пакета, New, Class)
В результате в редакторе должнен быть результат, похожий на:
package ru.nsunc.lskywalker; class Privet { }
Вывод на экран
Чтобы напечатать строчку на экране, можно воспользоваться функциями System.out.print (напечатает строку) или System.out.println (напечатает строку и перейдет на начало следующей строки). Например:
package ru.nsunc.lskywalker; class Privet { public static void main (String[] args){ System.out.println("Привет"); } }
Объявление переменных
Чтобы объявить переменную в Яве, нужно сначало указать ее тип (множество значений, которые может принимать переменная) и ее имя.
Например:
int userID;
Описывает переменную целого типа (int) имеющую имя userID.
double multiplicationResult;
Описывает вещественную переменную (double) имеющую имя multiplicationResult.
package ru.nsunc.lskywalker; class Privet { public static void main (String[] args){ int a; a = 5; int b = 10; double c, d; c = 10.2; d = a * b * c; System.out.println("d = " + d); } }
Ветвления
Если вы хотите, чтобы поведение вашей программы изменялось в зависимости от состояния переменных, можно воспользоваться оператором ветвления.
if (условие) { выражения, которые выполняются если условие истинно } else { выражения, которые выполняются если условие ложно }
Ветвь else в операторе ветвления необязательна и может быть пропущена.
class Privet { public static main (String[] args){ int a; a = 5; int b = 10; double c, d; c = 10.2; d = a * b * c; System.out.println("d = " + d); if (d > 100) { System.out.println("d > 100"); } else { System.out.println("d <= 100"); } } }
Циклы
Если какой-то участок кода надо выполнить несколько раз, можно воспользоваться следующим оператором:
for (начальное условие; ограничение; способ изменения){ }
Например:
class Privet { public static main (String[] args){ int a; a = 5; for (int i = 0; i < a; i++) { System.out.println(a); } } }
Напечатает переменную a a раз.
Урок 2
Оператор выбора
Когда в программе требуется проверить много однотипных вариантов, пользоваться цепочками операторов if..else нерационально. Упростить задачу помогает вот такая конструкция:
switch (переменная){ case значение1: выражения; break; case значение2: выражения; break; case значение3: выражения; break; case значение4: выражения; break; case значение5: выражения; break; case значение6: выражения; break; case значение7: выражения; break; default: выражения; break; }
Чтение данных с клавиатуры
package ru.nsesc.lskywalker; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Privet { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Введите первое число: "); int input = Integer.parseInt(reader.readLine()); System.out.println("Введите второе число: "); int input2 = Integer.parseInt(reader.readLine()); System.out.println("Введите третье число: "); double input3 = Double.parseDouble(reader.readLine()); System.out.println(input + input2 + input3); } }
Заполнение массива случайными числами
int size = 10; int[] arr = new int[size]; for(int i = 0; i < size; i++) { arr[i] = (int)Math.round(Math.random() * 10); }
Урок 3
Работа с графикой
package ru.nsunc.lskywalker; import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.font.TextLayout; import java.awt.geom.*; import javax.swing.*; public class Graph extends JPanel { private static final long serialVersionUID = 1L; public int getWindowWidth() { return windowWidth; } public void setWindowWidth(int windowWidth) { this.windowWidth = windowWidth; } public int getWindowHeight() { return windowHeight; } public void setWindowHeight(int windowHeight) { this.windowHeight = windowHeight; } private int windowWidth = 400; private int windowHeight = 400; @Override public void paintComponent(Graphics gr) { Graphics2D g = (Graphics2D) gr; Color oldColor = g.getColor(); Paint paint = g.getPaint(); Stroke oldStroke = g.getStroke(); float[] shtrich = {14, 5}; BasicStroke bs = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 3, shtrich, 0); g.setStroke(bs); g.draw(new Line2D.Float(20, 20, 360, 20)); g.setStroke(oldStroke); g.draw(new Rectangle2D.Float(20, 40, 340, 20)); g.draw(new RoundRectangle2D.Float(20, 70, 340, 30, 20, 15)); g.draw(new Ellipse2D.Float(20, 110, 150, 60)); g.draw(new Ellipse2D.Float(200, 110, 60, 60)); g.draw(new Arc2D.Float(280, 110, 80, 60, 0, 180, Arc2D.OPEN)); g.draw(new Arc2D.Float(280, 150, 80, 50, 0, 80, Arc2D.CHORD)); g.draw(new Arc2D.Float(240, 150, 80, 60, 0, 90, Arc2D.PIE)); int[] arrayX = {20, 100, 100, 250, 250, 20, 20, 50}; int[] arrayY = {180, 180, 200, 200, 220, 200, 200, 190}; GeneralPath genPath = new GeneralPath(); genPath.moveTo(arrayX[0], arrayY[0]); for (int inn = 1; inn < 8; inn++) { genPath.lineTo(arrayX[inn], arrayY[inn]); } genPath.closePath(); g.draw(genPath); Color newColor = new Color(0, 0, 255); g.setColor(newColor); Font font = new Font("Tahoma", Font.BOLD | Font.ITALIC, 50); Font oldFont = g.getFont(); g.setFont(font); bs = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 3); g.setStroke(bs); FontRenderContext fontCont = g.getFontRenderContext(); TextLayout tLayout = new TextLayout("SBP", font, fontCont); AffineTransform affTrans = new AffineTransform(); affTrans.setToTranslation(270, 220); g.draw(tLayout.getOutline(affTrans)); g.setFont(oldFont); g.setColor(oldColor); g.setStroke(oldStroke); // Draw axes; g.drawLine(20, 220, 20, 350); g.drawLine(20, 350, 360, 350); g.drawString("Y", 25, 230); g.drawString("X", 350, 346); // Draw a curve; int[] xArray = {20, 40, 60, 80, 100, 120, 130, 140, 280, 332}; int[] yArray = {350, 345, 340, 310, 290, 280, 275, 273, 271, 269}; g.setColor(newColor); genPath = new GeneralPath(); genPath.moveTo(xArray[0], yArray[0]); for (int inn = 1; inn < 10; inn++) { genPath.lineTo(xArray[inn], yArray[inn]); } //genPath.closePath(); g.draw(genPath); g.setColor(oldColor); g.drawString("y = f(x)", 180, 267); GradientPaint gradPaint = new GradientPaint(20, 50, Color.green, 200, 50, Color.yellow); g.setPaint(gradPaint); g.fillRect(21, 41, 339, 19); g.setPaint(paint); gradPaint = new GradientPaint(20, 110, Color.blue, 96, 110, Color.white, true); g.setPaint(gradPaint); g.fill(new Ellipse2D.Float(21, 111, 149, 59)); g.setPaint(paint); gradPaint = new GradientPaint(230, 100, Color.black, 230, 113, Color.white, true); g.setPaint(gradPaint); g.fill(new Ellipse2D.Float(200, 110, 60, 60)); g.setPaint(paint); g.fill(new RoundRectangle2D.Float(20, 70, 340, 30, 20, 15)); g.setPaint(paint); } public static void main(String[] args) { JFrame f = new JFrame(); Graph window = new Graph(); window.setWindowHeight(1000); window.setWindowWidth(1000); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(window); f.setSize(window.getWindowWidth(), window.getWindowHeight()); f.setLocation(200,200); f.setVisible(true); } }
То же, только без шахмат и первокурсниц:
import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.font.TextLayout; import java.awt.geom.*; import javax.swing.*; public class Graph extends JPanel { private static final long serialVersionUID = 1L; public int getWindowWidth() { return windowWidth; } public void setWindowWidth(int windowWidth) { this.windowWidth = windowWidth; } public int getWindowHeight() { return windowHeight; } public void setWindowHeight(int windowHeight) { this.windowHeight = windowHeight; } private int windowWidth = 640; private int windowHeight = 640; @Override public void paintComponent(Graphics gr) { Graphics2D g = (Graphics2D) gr; Color oldColor = g.getColor(); Paint paint = g.getPaint(); Stroke oldStroke = g.getStroke(); float[] shtrich = {14, 5}; BasicStroke bs = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 3, shtrich, 0); g.setStroke(bs); GeneralPath genPath = new GeneralPath(); g.draw(genPath); Color newColor = new Color(0, 0, 255); g.setColor(newColor); Font font = new Font("Tahoma", Font.BOLD | Font.ITALIC, 50); Font oldFont = g.getFont(); g.setFont(font); bs = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 3); g.setStroke(bs); FontRenderContext fontCont = g.getFontRenderContext(); // TextLayout tLayout = new TextLayout("SBP", font, fontCont); // AffineTransform affTrans = new AffineTransform(); //affTrans.setToTranslation(270, 220); // g.draw(tLayout.getOutline(affTrans)); g.setFont(oldFont); g.setColor(oldColor); g.setStroke(oldStroke); // Draw axes; g.drawLine(20, 220, 20, 350); g.drawLine(20, 350, 360, 350); g.drawString("Y", 25, 230); g.drawString("X", 350, 346); // Draw a curve; double[] xArray; double[] yArray; double left = -4; double right = 4; double step = 0.1; int size = (int)((right-left)/step); xArray = new double[size]; yArray = new double[size]; xArray[0] = left; yArray[0] = Math.sin(xArray[0]); for(int i = 1; i < size; i++) { xArray[i] = xArray[i - 1] + step; yArray[i] = Math.sin(xArray[i]); } long xArrayLong[] = new long[size]; long yArrayLong[] = new long[size]; for(int i = 0; i < size; i++) { xArrayLong[i] = Math.round(xArray[i]); yArrayLong[i] = Math.round(yArray[i]); } g.setColor(newColor); genPath = new GeneralPath(); genPath.moveTo(xArrayLong[0], yArrayLong[0]); for (int inn = 1; inn < size; inn++) { genPath.lineTo(xArrayLong[inn], yArrayLong[inn]); } //genPath.closePath(); g.draw(genPath); g.setColor(oldColor); g.drawString("y = f(x)", 180, 267); } public static void main(String[] args) { JFrame f = new JFrame(); Graph window = new Graph(); window.setWindowHeight(640); window.setWindowWidth(640); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(window); f.setSize(window.getWindowWidth(), window.getWindowHeight()); f.setLocation(200,200); f.setVisible(true); } }
Урок 4
Работа с файлами, чтение строками
package ru.nsesc.lskywalker; import java.io.*; public class Reader { public void readData() { // описываем входной файловый поток FileInputStream inputFileStream; // описываем входной читатель из потока InputStreamReader inputFileReader = null; try { // сопоставляем входной поток файлу inputFileStream = new FileInputStream("superfile.txt"); // и открываем его на чтение inputFileReader = new InputStreamReader(inputFileStream, "UTF-8"); } catch (FileNotFoundException ex) { System.out.println(ex); } catch (UnsupportedEncodingException ex) { System.out.println(ex); } // создаем читатель из файла BufferedReader inputFile = new BufferedReader(inputFileReader); // переменная, в которой будет храниться прочитанная из файла строка String str; // массив строк, в котором будет храниться результат деления нашей свежепрочитанной строки на куски String[] splitted = null; try { // пока можем читать из файда while ((str = inputFile.readLine()) != null) { // делим прочитанную строку на массив строк, по разделителю ";" splitted = str.split(";"); } } catch (IOException ex) { System.out.println(ex); } } }
Работа с файлами, чтение посимвольно
package ru.nsesc.lskywalker; import java.io.*; public class Reader { public void readData() { // описываем входной файловый поток FileInputStream inputFileStream; // описываем входной читатель из потока InputStreamReader inputFileReader = null; try { // сопоставляем входной поток файлу inputFileStream = new FileInputStream("superfile.txt"); // и открываем его на чтение inputFileReader = new InputStreamReader(inputFileStream, "UTF-8"); } catch (FileNotFoundException ex) { System.out.println(ex); } catch (UnsupportedEncodingException ex) { System.out.println(ex); } // создаем читатель из файла BufferedReader inputFile = new BufferedReader(inputFileReader); // переменная, в которой будет храниться прочитанная из файла строка String str; //переменная, в которую сохраним номер прочитанного символа int c = 0; // массив строк, в котором будет храниться результат деления нашей свежепрочитанной строки на куски String[] splitted = null; try { // пока можем читать из файда while ((c = inputFile.read()) != -1) { if((char)c != '.') { System.out.println((char) c); } else { break; } } } catch (IOException ex) { System.out.println(ex); } } }
Как выбрать только четные числа из строки?
package ru.nsesc.lskywalker; import java.io.*; public class Reader { public void readData() { // описываем входной файловый поток FileInputStream inputFileStream; // описываем входной читатель из потока InputStreamReader inputFileReader = null; try { // сопоставляем входной поток файлу inputFileStream = new FileInputStream("superfile.txt"); // и открываем его на чтение inputFileReader = new InputStreamReader(inputFileStream, "UTF-8"); } catch (FileNotFoundException ex) { System.out.println(ex); } catch (UnsupportedEncodingException ex) { System.out.println(ex); } // создаем читатель из файла BufferedReader inputFile = new BufferedReader(inputFileReader); // переменная, в которой будет храниться прочитанная из файла строка String str; //переменная, в которую сохраним номер прочитанного символа int c = 0; // массив строк, в котором будет храниться результат деления нашей свежепрочитанной строки на куски String[] splitted = null; try { // пока можем читать из файла while ((c = inputFile.read()) != -1) { if((char)c != '.') { if(c % 2 != 0) { System.out.println(c); } } else { break; } } } catch (IOException ex) { System.out.println(ex); } } }
Запись текстовых данных в файл
package ru.nsesc.lskywalker; import java.io.*; public class Writer { public static void writeData(String text) { BufferedWriter writer = null; try { FileOutputStream outputFileStream = new FileOutputStream("filename.txt"); OutputStreamWriter outputFileWriter = new OutputStreamWriter(outputFileStream); writer = new BufferedWriter(outputFileWriter); writer.write(text); // ВАЖНО. Так как мы используем буферзованный вывод, то выходной поток необходимо закрывать, чтобы // сохраненные там данные были записаны на диск writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Литература
Изучаем Java | Учебник для курса |
DjView | Программа для чтения DjVu |
Задачи
Задача 6
Файл представляет собой набор произвольного количества строк разнообразной длины. Строки разбиты на слова пробелами. Требуется обработать содержимое файла таким образом, чтобы ширина строк в символах была не больше наперед заданного числа.
Пример:
Дан файл
aaa bb ccccc dd e f gg hhh
Заданная длина строки: 4
aaa bb ccccc dd e f gg hhh
Задача 7
Удалить из файла все лишние пробелы. Пробелы считаются лишними если:
- Повторяются более чем 1 раз подряд
- Стоят перед знаком препинания
- Стоят после открывающей или перед закрывающей кавычками
- Стоят после открывающей или перед закрывающей скобками
Списки
По приведенному наброску написать все упомянутые функции для реализации списков на языке Java. В результате программа должна как минимум уметь (на тройку):
- создать список
- добавить туда элемент
- удалить элемент
- вывести список на экран
class List { private: int data; List next; public: // возвращает значение, которое хранится в элементе списка int getData(); // устанавливает значение, которое хранится в элементе списка void setData(int data) { this.data = data; } // возвращает ссылку на следующий элемент списка List getNext() {}; // устанавливает ссылку на следующий элемент void setNext(List next) {}; // добавляет элемент списка с данными data после элемента с номером index void addElement(int data, int index) {}; // добавляет элемент списка с данными data в конец списка void addElement(int data) { List tmp = new List(); tmp.setData(data); tmp.setNext(NULL); List current = this.next; while(current != NULL) { next = next.getNext(); } next.setNext(tmp); }; // удаляет элемент с номером index void removeElement(int index) {}; // возвращает голову списка (первый элемент) List head() {}; // возвращает хвост списка (последний элемент) List tail() {}; // возвращает истину, если список пуст boolean isEmpty() {}; // очищает список void emptyList() {}; // считает количество элементов в списке int size() {}; // выводит список на экран void print() {}; public static void main() { List list; // заполним список элементами for(int i = 0; i < 10; i++) { list.addElement(i); } // выведем его на экран list.print(); return 0; } }
Первое задание на оценку
Реализовать программу, управляющую библиотекой. В ней должно быть создано необходимое количество классов, которые описывают нужные структуры данных (например, классы Book и Library)
В программе должна присутствовать следующая функциональность:
- Добавление книги в библиотеку
- Выдача книги читателю
- Получение книги обратно
- Если книга просрочена, читателя нужно оштрафовать.
Пример главного класса программы:
public class Ex { public static void main(String[] argc) { // Количество книжек около 10 штук, в качестве примера напишу лишь две Book book1 = new Book(); // задание знаений с помощью сеттеров book1.setAuthor("Пушкин"); book1.setTitle("Руслан и Людмила"); book1.setYear(2011); book1.setPrice(500); // задание значений полей с помощью конструктора (не обязательно) Book book2 = new Book("Лермонтов", "Мцыри", 2010, 398); Library lib = new Library(); lib.addBook(book1); lib.addBook(book2); lib.giveToReader("Сергей", "Руслан и Людмила", 25, 10, 2014); // Выдать книжку читателю Сергей 25 октября 2014 года lib.giveToReader("Николай", "Руслан и Людмила", 24, 10, 2014); // Вывести сообщение об ошибке, так как эта книжка уже выдана lib.giveToReader("Марина", "Мцыри", 30, 12, 2014); lib.getBack("Сергей", "Руслан и Людмила", 14, 12, 2014); // Сдал в срок, просто получить книжку lib.getBack("Марина", "Мцыри", 10, 9, 2015); // Просрочила, выписать штраф } }
Второе задание на оценку
Написать программу, реализующую следующие структуры данных:
- Список преподавателей
- Список предметов
- Список соответствия преподавателя предмету (один преподаватель может вести несколько предметов)
- Написать методы:
- Вывести список преподавателей с теми предметами, которые они ведут в формате
имя преподавателя предмет1, предмет2, предмет3
- Вывести список предметов
предмет имя преподавателя
- Вывести преподавателя с наибольшим количеством предметов
HashMap<String, String> teachers = new HashMap<String, String>(); // где-то тут заполняется карта 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(); }
Итоговая контрольная работа
Второй семестр
Задание 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
В этом файле содержатся рейтинги участников на разных этапах. Каждая строка содержит следующее:
Номер_этапа место_участника номер_участника время_участника
Участники, сошедшие с дистанции во время этапа с номером i, где (1 ≤ i ≤ 21) исключены из рейтингов для всех последующих этапов.
Класс-обертка для чтения из файла прилагается.
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) { } } } }
Работа делится на две части. Первая заключается в создании системы классов и объектов для представления данных и начальном заполнении их информацией из файла. Вторая в статистической обработке данных.
Часть 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. Ответ округлить до двух знаков после запятой. Набросок для этого класса приведен далее.
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 Оставшаяся часть программы (вывести данные, чтобы удостовериться в корректном чтении файла, // вычислить средний возраст участников и т.д. } } }