мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| java:basics [19/01/2015 09:20] – ybezrukov | java:basics [19/01/2015 09:23] (текущий) – ybezrukov | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | [[Первый семестр]] | ||
| - | ====== Урок 1 ====== | + | [[Второй семестр]] |
| - | ===== Начало работы ===== | + | |
| - | - Запустите Eclipse | ||
| - | - Создайте новый проект (Правой кнопкой по левой вкладке Package Explorer, New, Project) | ||
| - | - Создайте новый пакет (Правой кнопкой по имени проекта New, Package) | ||
| - | - Создайте новый класс (Правой кнопкой по имени пакета, | ||
| - | |||
| - | В результате в редакторе должнен быть результат, | ||
| - | <code java> | ||
| - | package ru.nsunc.lskywalker; | ||
| - | |||
| - | class Privet { | ||
| - | |||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Вывод на экран ===== | ||
| - | |||
| - | Чтобы напечатать строчку на экране, | ||
| - | |||
| - | <code java> | ||
| - | package ru.nsunc.lskywalker; | ||
| - | |||
| - | class Privet { | ||
| - | | ||
| - | | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Объявление переменных ===== | ||
| - | |||
| - | Чтобы объявить переменную в Яве, нужно сначало указать ее тип (множество значений, | ||
| - | |||
| - | Например: | ||
| - | <code java> | ||
| - | int userID; | ||
| - | </ | ||
| - | Описывает переменную целого типа (int) имеющую имя userID. | ||
| - | |||
| - | <code java> | ||
| - | double multiplicationResult; | ||
| - | </ | ||
| - | Описывает вещественную переменную (double) имеющую имя multiplicationResult. | ||
| - | |||
| - | <code java> | ||
| - | package ru.nsunc.lskywalker; | ||
| - | |||
| - | class Privet { | ||
| - | | ||
| - | int a; | ||
| - | a = 5; | ||
| - | int b = 10; | ||
| - | | ||
| - | c = 10.2; | ||
| - | d = a * b * c; | ||
| - | | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Ветвления ===== | ||
| - | |||
| - | Если вы хотите, | ||
| - | |||
| - | <code java> | ||
| - | if (условие) { | ||
| - | | ||
| - | } else { | ||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Ветвь else в операторе ветвления необязательна и может быть пропущена. | ||
| - | <code java> | ||
| - | class Privet { | ||
| - | | ||
| - | int a; | ||
| - | a = 5; | ||
| - | int b = 10; | ||
| - | | ||
| - | c = 10.2; | ||
| - | d = a * b * c; | ||
| - | | ||
| - | if (d > 100) { | ||
| - | System.out.println(" | ||
| - | } else { | ||
| - | System.out.println(" | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | ===== Циклы ===== | ||
| - | |||
| - | Если какой-то участок кода надо выполнить несколько раз, можно воспользоваться следующим оператором: | ||
| - | |||
| - | <code java> | ||
| - | for (начальное условие; | ||
| - | |||
| - | } | ||
| - | </ | ||
| - | Например: | ||
| - | |||
| - | <code java> | ||
| - | class Privet { | ||
| - | | ||
| - | int a; | ||
| - | a = 5; | ||
| - | for (int i = 0; i < a; i++) { | ||
| - | System.out.println(a); | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Напечатает переменную a a раз. | ||
| - | |||
| - | ====== Урок 2 ====== | ||
| - | |||
| - | ===== Оператор выбора ===== | ||
| - | |||
| - | Когда в программе требуется проверить много однотипных вариантов, | ||
| - | |||
| - | <code java> | ||
| - | switch (переменная){ | ||
| - | case значение1: | ||
| - | case значение2: | ||
| - | case значение3: | ||
| - | case значение4: | ||
| - | case значение5: | ||
| - | case значение6: | ||
| - | case значение7: | ||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Чтение данных с клавиатуры ===== | ||
| - | <code java> | ||
| - | 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); | ||
| - | |||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Заполнение массива случайными числами ===== | ||
| - | <code java> | ||
| - | |||
| - | int size = 10; | ||
| - | int[] arr = new int[size]; | ||
| - | |||
| - | for(int i = 0; i < size; i++) | ||
| - | { | ||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ====== Урок 3 ====== | ||
| - | |||
| - | ===== Работа с графикой ===== | ||
| - | <code java> | ||
| - | 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, | ||
| - | g.setStroke(bs); | ||
| - | g.draw(new Line2D.Float(20, | ||
| - | g.setStroke(oldStroke); | ||
| - | |||
| - | g.draw(new Rectangle2D.Float(20, | ||
| - | |||
| - | g.draw(new RoundRectangle2D.Float(20, | ||
| - | |||
| - | g.draw(new Ellipse2D.Float(20, | ||
| - | |||
| - | g.draw(new Ellipse2D.Float(200, | ||
| - | |||
| - | g.draw(new Arc2D.Float(280, | ||
| - | g.draw(new Arc2D.Float(280, | ||
| - | g.draw(new Arc2D.Float(240, | ||
| - | |||
| - | 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], | ||
| - | for (int inn = 1; inn < 8; inn++) { | ||
| - | genPath.lineTo(arrayX[inn], | ||
| - | } | ||
| - | genPath.closePath(); | ||
| - | g.draw(genPath); | ||
| - | |||
| - | Color newColor = new Color(0, 0, 255); | ||
| - | g.setColor(newColor); | ||
| - | Font font = new Font(" | ||
| - | Font oldFont = g.getFont(); | ||
| - | g.setFont(font); | ||
| - | bs = new BasicStroke(3, | ||
| - | g.setStroke(bs); | ||
| - | FontRenderContext fontCont = g.getFontRenderContext(); | ||
| - | TextLayout tLayout = new TextLayout(" | ||
| - | AffineTransform affTrans = new AffineTransform(); | ||
| - | affTrans.setToTranslation(270, | ||
| - | g.draw(tLayout.getOutline(affTrans)); | ||
| - | g.setFont(oldFont); | ||
| - | g.setColor(oldColor); | ||
| - | g.setStroke(oldStroke); | ||
| - | |||
| - | // Draw axes; | ||
| - | g.drawLine(20, | ||
| - | g.drawLine(20, | ||
| - | g.drawString(" | ||
| - | g.drawString(" | ||
| - | // 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], | ||
| - | for (int inn = 1; inn < 10; inn++) { | ||
| - | genPath.lineTo(xArray[inn], | ||
| - | } | ||
| - | // | ||
| - | g.draw(genPath); | ||
| - | g.setColor(oldColor); | ||
| - | g.drawString(" | ||
| - | |||
| - | GradientPaint gradPaint = | ||
| - | new GradientPaint(20, | ||
| - | g.setPaint(gradPaint); | ||
| - | g.fillRect(21, | ||
| - | g.setPaint(paint); | ||
| - | |||
| - | gradPaint = | ||
| - | new GradientPaint(20, | ||
| - | g.setPaint(gradPaint); | ||
| - | g.fill(new Ellipse2D.Float(21, | ||
| - | g.setPaint(paint); | ||
| - | |||
| - | gradPaint = | ||
| - | new GradientPaint(230, | ||
| - | g.setPaint(gradPaint); | ||
| - | g.fill(new Ellipse2D.Float(200, | ||
| - | g.setPaint(paint); | ||
| - | |||
| - | g.fill(new RoundRectangle2D.Float(20, | ||
| - | 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(), | ||
| - | f.setLocation(200, | ||
| - | f.setVisible(true); | ||
| - | } | ||
| - | |||
| - | |||
| - | } | ||
| - | |||
| - | </ | ||
| - | То же, только без шахмат и первокурсниц: | ||
| - | <code java> | ||
| - | 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, | ||
| - | g.setStroke(bs); | ||
| - | GeneralPath genPath = new GeneralPath(); | ||
| - | g.draw(genPath); | ||
| - | |||
| - | Color newColor = new Color(0, 0, 255); | ||
| - | g.setColor(newColor); | ||
| - | Font font = new Font(" | ||
| - | Font oldFont = g.getFont(); | ||
| - | g.setFont(font); | ||
| - | bs = new BasicStroke(3, | ||
| - | g.setStroke(bs); | ||
| - | FontRenderContext fontCont = g.getFontRenderContext(); | ||
| - | // TextLayout tLayout = new TextLayout(" | ||
| - | // | ||
| - | // | ||
| - | // g.draw(tLayout.getOutline(affTrans)); | ||
| - | g.setFont(oldFont); | ||
| - | g.setColor(oldColor); | ||
| - | g.setStroke(oldStroke); | ||
| - | |||
| - | // Draw axes; | ||
| - | g.drawLine(20, | ||
| - | g.drawLine(20, | ||
| - | g.drawString(" | ||
| - | g.drawString(" | ||
| - | // Draw a curve; | ||
| - | double[] xArray; | ||
| - | double[] yArray; | ||
| - | double left = -4; | ||
| - | double right = 4; | ||
| - | double step = 0.1; | ||
| - | int size = (int)((right-left)/ | ||
| - | 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], | ||
| - | for (int inn = 1; inn < size; inn++) { | ||
| - | genPath.lineTo(xArrayLong[inn], | ||
| - | } | ||
| - | // | ||
| - | |||
| - | g.draw(genPath); | ||
| - | g.setColor(oldColor); | ||
| - | g.drawString(" | ||
| - | } | ||
| - | |||
| - | 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(), | ||
| - | f.setLocation(200, | ||
| - | f.setVisible(true); | ||
| - | } | ||
| - | |||
| - | |||
| - | } | ||
| - | </ | ||
| - | |||
| - | ====== Урок 4 ====== | ||
| - | ===== Работа с файлами, | ||
| - | <code java> | ||
| - | package ru.nsesc.lskywalker; | ||
| - | import java.io.*; | ||
| - | |||
| - | public class Reader { | ||
| - | |||
| - | public void readData() | ||
| - | { | ||
| - | // описываем входной файловый поток | ||
| - | FileInputStream inputFileStream; | ||
| - | // описываем входной читатель из потока | ||
| - | InputStreamReader inputFileReader = null; | ||
| - | try { | ||
| - | // сопоставляем входной поток файлу | ||
| - | inputFileStream = new FileInputStream(" | ||
| - | // и открываем его на чтение | ||
| - | inputFileReader = new InputStreamReader(inputFileStream, | ||
| - | } | ||
| - | 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); | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | ===== Работа с файлами, | ||
| - | <code java> | ||
| - | package ru.nsesc.lskywalker; | ||
| - | import java.io.*; | ||
| - | |||
| - | public class Reader { | ||
| - | |||
| - | public void readData() | ||
| - | { | ||
| - | // описываем входной файловый поток | ||
| - | FileInputStream inputFileStream; | ||
| - | // описываем входной читатель из потока | ||
| - | InputStreamReader inputFileReader = null; | ||
| - | try { | ||
| - | // сопоставляем входной поток файлу | ||
| - | inputFileStream = new FileInputStream(" | ||
| - | // и открываем его на чтение | ||
| - | inputFileReader = new InputStreamReader(inputFileStream, | ||
| - | } | ||
| - | 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); | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | ===== Как выбрать только четные числа из строки? | ||
| - | <code java> | ||
| - | package ru.nsesc.lskywalker; | ||
| - | import java.io.*; | ||
| - | |||
| - | public class Reader { | ||
| - | |||
| - | public void readData() | ||
| - | { | ||
| - | // описываем входной файловый поток | ||
| - | FileInputStream inputFileStream; | ||
| - | // описываем входной читатель из потока | ||
| - | InputStreamReader inputFileReader = null; | ||
| - | try { | ||
| - | // сопоставляем входной поток файлу | ||
| - | inputFileStream = new FileInputStream(" | ||
| - | // и открываем его на чтение | ||
| - | inputFileReader = new InputStreamReader(inputFileStream, | ||
| - | } | ||
| - | 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); | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | ===== Запись текстовых данных в файл ===== | ||
| - | |||
| - | <code java> | ||
| - | package ru.nsesc.lskywalker; | ||
| - | import java.io.*; | ||
| - | |||
| - | public class Writer { | ||
| - | public static void writeData(String text) | ||
| - | { | ||
| - | BufferedWriter writer = null; | ||
| - | try | ||
| - | { | ||
| - | FileOutputStream outputFileStream = new FileOutputStream(" | ||
| - | OutputStreamWriter outputFileWriter = new OutputStreamWriter(outputFileStream); | ||
| - | writer = new BufferedWriter(outputFileWriter); | ||
| - | writer.write(text); | ||
| - | | ||
| - | // ВАЖНО. Так как мы используем буферзованный вывод, то выходной поток необходимо закрывать, | ||
| - | // сохраненные там данные были записаны на диск | ||
| - | writer.close(); | ||
| - | } | ||
| - | catch (FileNotFoundException e) | ||
| - | { | ||
| - | e.printStackTrace(); | ||
| - | } | ||
| - | catch (IOException e) | ||
| - | { | ||
| - | e.printStackTrace(); | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | ====== Литература ====== | ||
| - | |[[http:// | ||
| - | |||
| - | |[[http:// | ||
| - | |||
| - | ====== Задачи ====== | ||
| - | |||
| - | ===== Задача 6 ===== | ||
| - | |||
| - | Файл представляет собой набор произвольного количества строк разнообразной длины. Строки разбиты на слова пробелами. Требуется обработать содержимое файла таким образом, | ||
| - | |||
| - | Пример: | ||
| - | |||
| - | Дан файл | ||
| - | < | ||
| - | aaa bb ccccc dd e f | ||
| - | gg hhh | ||
| - | </ | ||
| - | |||
| - | Заданная длина строки: | ||
| - | |||
| - | < | ||
| - | aaa | ||
| - | bb | ||
| - | ccccc | ||
| - | dd e | ||
| - | f gg | ||
| - | hhh | ||
| - | </ | ||
| - | |||
| - | ===== Задача 7 ===== | ||
| - | Удалить из файла все лишние пробелы. Пробелы считаются лишними если: | ||
| - | |||
| - | * Повторяются более чем 1 раз подряд | ||
| - | * Стоят перед знаком препинания | ||
| - | * Стоят после открывающей или перед закрывающей кавычками | ||
| - | * Стоят после открывающей или перед закрывающей скобками | ||
| - | |||
| - | ===== Списки ===== | ||
| - | |||
| - | По приведенному наброску написать все упомянутые функции для реализации списков на языке Java. В результате программа должна как минимум уметь (на тройку): | ||
| - | |||
| - | * создать список | ||
| - | * добавить туда элемент | ||
| - | * удалить элемент | ||
| - | * вывести список на экран | ||
| - | |||
| - | <code 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(); | ||
| - | | ||
| - | | ||
| - | List current = this.next; | ||
| - | | ||
| - | { | ||
| - | next = next.getNext(); | ||
| - | } | ||
| - | | ||
| - | }; | ||
| - | // удаляет элемент с номером 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; | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Первое задание на оценку ===== | ||
| - | |||
| - | Реализовать программу, | ||
| - | |||
| - | В программе должна присутствовать следующая функциональность: | ||
| - | |||
| - | * Добавление книги в библиотеку | ||
| - | * Выдача книги читателю | ||
| - | * Получение книги обратно | ||
| - | * Если книга просрочена, | ||
| - | |||
| - | Пример главного класса программы: | ||
| - | |||
| - | <code java> | ||
| - | 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(" | ||
| - | | ||
| - | Library lib = new Library(); | ||
| - | | ||
| - | lib.addBook(book1); | ||
| - | lib.addBook(book2); | ||
| - | | ||
| - | lib.giveToReader(" | ||
| - | lib.giveToReader(" | ||
| - | lib.giveToReader(" | ||
| - | | ||
| - | lib.getBack(" | ||
| - | |||
| - | lib.getBack(" | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | ===== Второе задание на оценку ===== | ||
| - | |||
| - | Написать программу, | ||
| - | |||
| - | - Список преподавателей | ||
| - | - Список предметов | ||
| - | - Список соответствия преподавателя предмету (один преподаватель может вести несколько предметов) | ||
| - | - Написать методы: | ||
| - | - Вывести список преподавателей с теми предметами, | ||
| - | - Вывести список предметов < | ||
| - | - Вывести преподавателя с наибольшим количеством предметов | ||
| - | |||
| - | <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 Оставшаяся часть программы (вывести данные, | ||
| - | // вычислить средний возраст участников и т.д. | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||