Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
java:basics [19/01/2015 09:22]
ybezrukov
java:basics [19/01/2015 09:23] (текущий)
ybezrukov
Строка 3: Строка 3:
 [[Второй семестр]] [[Второй семестр]]
  
- 
-====== Первый семестр ====== 
- 
- 
- 
-===== Урок 1 ===== 
- 
-==== Начало работы ==== 
- 
-  - Запустите Eclipse 
-  - Создайте новый проект (Правой кнопкой по левой вкладке Package Explorer, New, Project) 
-  - Создайте новый пакет (Правой кнопкой по имени проекта New, Package) 
-  - Создайте новый класс (Правой кнопкой по имени пакета,​ New, Class) 
- 
-В результате в редакторе должнен быть результат,​ похожий на: 
-<code java> 
-package ru.nsunc.lskywalker;​ 
- 
-class Privet { 
- 
-} 
-</​code>​ 
- 
-===== Вывод на экран ===== 
- 
-Чтобы напечатать строчку на экране,​ можно воспользоваться функциями System.out.print (напечатает строку) или System.out.println (напечатает строку и перейдет на начало следующей строки). Например:​ 
- 
-<code java> 
-package ru.nsunc.lskywalker;​ 
- 
-class Privet { 
-   ​public static void main (String[] args){ 
-     ​System.out.println("​Привет"​);​ 
-   } 
-} 
-</​code>​ 
- 
-===== Объявление переменных ===== 
- 
-Чтобы объявить переменную в Яве, нужно сначало указать ее тип (множество значений,​ которые может принимать переменная) и ее имя. 
- 
-Например:​ 
-<code java> 
-int userID; 
-</​code>​ 
-Описывает переменную целого типа (int) имеющую имя userID. 
- 
-<code java> 
-double multiplicationResult;​ 
-</​code>​ 
-Описывает вещественную переменную (double) имеющую имя multiplicationResult. 
- 
-<code java> 
-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); 
-   } 
-} 
-</​code>​ 
- 
-===== Ветвления ===== 
- 
-Если вы хотите,​ чтобы поведение вашей программы изменялось в зависимости от состояния переменных,​ можно воспользоваться оператором ветвления. 
- 
-<code java> 
-if (условие) { 
-   ​выражения,​ которые выполняются если условие истинно 
-} else { 
-   ​выражения,​ которые выполняются если условие ложно 
-}    
-</​code>​ 
- 
-Ветвь else в операторе ветвления необязательна и может быть пропущена. 
-<code java> 
-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"); 
-     } 
-   } 
-} 
-</​code>​ 
- 
- 
-===== Циклы ===== 
- 
-Если какой-то участок кода надо выполнить несколько раз, можно воспользоваться следующим оператором:​ 
- 
-<code java> 
-for (начальное условие;​ ограничение;​ способ изменения){ 
- 
-} 
-</​code>​ 
-Например:​ 
- 
-<code java> 
-class Privet { 
-   ​public static main (String[] args){ 
-     int a; 
-     a = 5; 
-     for (int i = 0; i < a; i++) { 
-        System.out.println(a);​ 
-     } 
-   } 
-} 
-</​code>​ 
- 
-Напечатает переменную a a раз. 
- 
-====== Урок 2 ====== 
- 
-===== Оператор выбора ===== 
- 
-Когда в программе требуется проверить много однотипных вариантов,​ пользоваться цепочками операторов if..else нерационально. Упростить задачу помогает вот такая конструкция:​ 
- 
-<code java> 
-switch (переменная){ 
-   case значение1:​ выражения;​ break; 
-   case значение2:​ выражения;​ break; 
-   case значение3:​ выражения;​ break; 
-   case значение4:​ выражения;​ break; 
-   case значение5:​ выражения;​ break; 
-   case значение6:​ выражения;​ break; 
-   case значение7:​ выражения;​ break; 
-   ​default:​ выражения;​ break; 
-} 
-</​code>​ 
- 
-===== Чтение данных с клавиатуры ===== 
-<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>​ 
- 
-===== Заполнение массива случайными числами ===== 
-<code java> 
- 
-int size = 10; 
-int[] arr = new int[size]; 
- 
-for(int i = 0; i < size; i++) 
-{ 
-   ​arr[i] = (int)Math.round(Math.random() * 10); 
-} 
-</​code>​ 
- 
-====== Урок 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,​ 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);​ 
-    } 
- 
- 
-} 
- 
-</​code>​ 
-То же, только без шахмат и первокурсниц:​ 
-<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,​ 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);​ 
-    } 
-  
-  
-} 
-</​code>​ 
- 
-====== Урок 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("​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);​ 
-        }  
-    } 
-} 
- 
-</​code>​ 
- 
-===== Работа с файлами,​ чтение посимвольно ===== 
-<code java> 
-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);​ 
-        } 
-    } 
-} 
- 
-</​code>​ 
- 
-===== Как выбрать только четные числа из строки?​ ===== 
-<code java> 
-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);​ 
-        } 
-    } 
-} 
- 
-</​code>​ 
- 
- 
-===== Запись текстовых данных в файл ===== 
- 
-<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("​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();​ 
-        } 
-    } 
-}    ​ 
- 
-</​code>​ 
- 
-====== Литература ====== 
-|[[http://​www.nsunc.com/​docs/​Java/​Heads_first_Java.djvu|Изучаем Java]]| Учебник для курса | 
- 
-|[[http://​sourceforge.net/​projects/​djvu/​files/​DjVuLibre_Windows/​3.5.25%2B4.9/​|DjView]] | Программа для чтения DjVu| 
- 
-====== Задачи ====== 
- 
-===== Задача 6 ===== 
- 
-Файл представляет собой набор произвольного количества строк разнообразной длины. Строки разбиты на слова пробелами. Требуется обработать содержимое файла таким образом,​ чтобы ширина строк в символах была не больше наперед заданного числа. 
- 
-Пример:​ 
- 
-Дан файл 
-<​code>​ 
-aaa bb ccccc dd e f 
-gg hhh 
-</​code>​ 
- 
-Заданная длина строки:​ 4 
- 
-<​code>​ 
-aaa 
-bb 
-ccccc 
-dd e 
-f gg 
-hhh 
-</​code>​ 
- 
-===== Задача 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(); 
-     ​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; 
-  } 
-} 
-</​code>​ 
- 
-===== Первое задание на оценку ===== 
- 
-Реализовать программу,​ управляющую библиотекой. В ней должно быть создано необходимое количество классов,​ которые описывают нужные структуры данных (например,​ классы Book и Library) 
- 
-В программе должна присутствовать следующая функциональность:​ 
- 
-  * Добавление книги в библиотеку 
-  * Выдача книги читателю 
-  * Получение книги обратно 
-  * Если книга просрочена,​ читателя нужно оштрафовать. 
- 
-Пример главного класса программы:​ 
- 
-<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("​Лермонтов",​ "​Мцыри",​ 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); // Просрочила,​ выписать штраф 
-    } 
-} 
- 
-</​code>​ 
- 
-===== Второе задание на оценку ===== 
- 
-Написать программу,​ реализующую следующие структуры данных:​ 
- 
-  - Список преподавателей 
-  - Список предметов 
-  - Список соответствия преподавателя предмету (один преподаватель может вести несколько предметов) 
-  - Написать методы:​ 
-    - Вывести список преподавателей с теми предметами,​ которые они ведут в формате <​code>​имя преподавателя предмет1,​ предмет2,​ предмет3</​code>​ 
-    - Вывести список предметов <​code>​предмет имя преподавателя</​code>​ 
-    - Вывести преподавателя с наибольшим количеством предметов 
- 
-<code java> 
-    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();​ 
-    } 
-</​code>​ 
- 
-===== Итоговая контрольная работа ===== 
- 
-[[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>​ 
java/basics.txt · Последние изменения: 19/01/2015 09:23 — ybezrukov
CC Attribution-Noncommercial 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0