мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияСледующая версияСледующая версия справа и слева | ||
java:elective [28/02/2013 14:09] – nbazhenov | java:elective [20/11/2013 14:32] – nbazhenov | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Семинары (2013-2014) ====== | ||
+ | |||
+ | * [[java: | ||
+ | * [[java: | ||
+ | * [[java: | ||
+ | * [[java: | ||
+ | * [[java: | ||
+ | |||
+ | ====== Семинары (2012-2013) ====== | ||
+ | |||
+ | * [[java: | ||
+ | * [[java: | ||
+ | * [[java: | ||
+ | * [[java: | ||
+ | * [[java: | ||
+ | * [[java: | ||
+ | |||
====== Полезные ссылки ====== | ====== Полезные ссылки ====== | ||
Строка 4: | Строка 21: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
- | |||
- | ====== Семинар 1 ====== | ||
- | |||
- | Перед началом работы рекомендуется прочитать уроки 1 и 2 из [[java: | ||
- | |||
- | ===== Пример 1.1 ===== | ||
- | |||
- | Программа "Hello world" | ||
- | |||
- | <code java> | ||
- | package com.nsunc.wiki.nbazhenov; | ||
- | |||
- | public class HelloWorld { | ||
- | public static void main (String[] args){ | ||
- | System.out.println(" | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | ===== Пример 1.2 ===== | ||
- | |||
- | В лекции 1 был показан пример класса, | ||
- | <code java> | ||
- | package com.nsunc.wiki.nbazhenov; | ||
- | |||
- | public class SimpleLight { | ||
- | boolean state; | ||
- | |||
- | boolean getState(){ | ||
- | return state; | ||
- | } | ||
- | |||
- | void on(){ | ||
- | state = true; | ||
- | } | ||
- | |||
- | void off(){ | ||
- | state = false; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | ===== Задание 1.1.A ===== | ||
- | |||
- | Создайте пакет '' | ||
- | |||
- | ===== Задание 1.1.B ===== | ||
- | |||
- | Модифицируйте реализацию '' | ||
- | |||
- | - Добавьте в класс '' | ||
- | - Измените код существующих методов так, чтобы при включении лампочки ее яркость принимала значение 1000, а при выключении - 0. | ||
- | - Напишите метод '' | ||
- | - Напишите метод '' | ||
- | |||
- | Протестируйте работу методов класса '' | ||
- | |||
- | // | ||
- | |||
- | ===== Задание 1.1.С ===== | ||
- | |||
- | Модифицируйте реализацию '' | ||
- | - Добавьте новое статическое целочисленное поле '' | ||
- | - Измените код метода '' | ||
- | - Напишите 2 статических метода: | ||
- | |||
- | Продемонстрируйте работу статических методов. | ||
- | |||
- | ====== Семинар 2 ====== | ||
- | |||
- | ===== Арифметические операторы ===== | ||
- | Основные арифметические операторы: | ||
- | |||
- | Можно использовать сокращенную форму записи операторов: | ||
- | <code java> | ||
- | a += b; // a = a + b | ||
- | a -= b; // a = a - b | ||
- | a *= b; // a = a * b | ||
- | a /= b; // a = a / b | ||
- | a %= b; // a = a % b | ||
- | </ | ||
- | |||
- | ===== Операторы инкремента и декремента ===== | ||
- | |||
- | Оператор инкремента записывается в виде '' | ||
- | |||
- | <code java> | ||
- | ++a; // префиксная версия оператора инкремента | ||
- | a++; // постфиксная версия оператора инкремента | ||
- | </ | ||
- | |||
- | В префиксном варианте сначала выполняется операция, | ||
- | |||
- | <code java> | ||
- | int a = 0; | ||
- | System.out.println(" | ||
- | System.out.println(" | ||
- | </ | ||
- | |||
- | ===== Операторы сравнения ===== | ||
- | |||
- | Операторы сравнения: | ||
- | |||
- | ===== Логические операторы ===== | ||
- | |||
- | Основные логические операторы: | ||
- | |||
- | ===== Задание 2.1 ===== | ||
- | |||
- | С клавиатуры вводится четыре натуральных числа: '' | ||
- | |||
- | // | ||
- | |||
- | // | ||
- | |||
- | ====== Семинар 3 ====== | ||
- | |||
- | ===== Задание 3.1 ===== | ||
- | |||
- | Реализовать алгоритм быстрой сортировки массива. | ||
- | |||
- | Описание алгоритма можно найти [[http:// | ||
- | |||
- | ===== Указания к оформлению решения ===== | ||
- | |||
- | * Метод, реализующий быструю сортировку, | ||
- | <code java> | ||
- | class MySort { | ||
- | static void quickSort (/* Ваш список параметров */){ | ||
- | // Ваш код | ||
- | } | ||
- | } | ||
- | </ | ||
- | * В методе '' | ||
- | <code java> | ||
- | import java.util.*; | ||
- | |||
- | public class TestClass { | ||
- | public static void main(String[] args){ | ||
- | int size = 20; | ||
- | int m[] = new int[size]; | ||
- | |||
- | Random rand = new Random(); | ||
- | for(int i = 0; i < size; i++) | ||
- | m[i] = rand.nextInt(100); | ||
- | |||
- | System.out.println(Arrays.toString(m)); | ||
- | |||
- | MySort.quickSort(/ | ||
- | System.out.println(Arrays.toString(m)); | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | ====== Семинар 4 ====== | ||
- | |||
- | Классы и интерфейсы в языке Java могут быть шаблонными (generic), т.е. иметь типовые параметры. При создании объекта такого класса нужно указывать конкретные значения его типовых параметров. | ||
- | |||
- | Пример использования generic-ов: | ||
- | |||
- | <code java> | ||
- | public class TwoTuple< | ||
- | public final A first; | ||
- | public final B second; | ||
- | public TwoTuple(A a, B b) { first = a; second = b; } | ||
- | public String toString() { | ||
- | return " | ||
- | } | ||
- | } | ||
- | |||
- | public class ThreeTuple< | ||
- | public final C third; | ||
- | public ThreeTuple(A a, B b, C c) { | ||
- | super(a, b); | ||
- | third = c; | ||
- | } | ||
- | public String toString() { | ||
- | return " | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Пример работы с этими классами: | ||
- | |||
- | <code java> | ||
- | TwoTuple< | ||
- | System.out.println(tuple0.toString()); | ||
- | ThreeTuple< | ||
- | System.out.println(tuple1.toString()); | ||
- | </ | ||
- | |||
- | ===== Задание 4.1 ===== | ||
- | |||
- | Приведем одну из возможных реализаций двусвязного списка: | ||
- | |||
- | <code java> | ||
- | public class MyLinkedList< | ||
- | private static class Node< | ||
- | E element = null; | ||
- | Node< | ||
- | Node< | ||
- | |||
- | Node (E element){ | ||
- | this.element = element; | ||
- | } | ||
- | } | ||
- | |||
- | private Node< | ||
- | private Node< | ||
- | |||
- | private int size = 0; | ||
- | |||
- | public void addLast(E element){// добавляет новый элемент в конец списка | ||
- | Node< | ||
- | if(tail == null){ | ||
- | head = tmpNode; | ||
- | tail = head; | ||
- | } else{ | ||
- | tail.next = tmpNode; | ||
- | tmpNode.previous = tail; | ||
- | tail = tmpNode; | ||
- | } | ||
- | } | ||
- | |||
- | public String toString(){// | ||
- | if(head == null) | ||
- | return null; | ||
- | |||
- | Node< | ||
- | String tmpString = " | ||
- | |||
- | while (tmpNode != tail){ | ||
- | tmpNode = tmpNode.next; | ||
- | tmpString = tmpString.concat(", | ||
- | }; | ||
- | tmpString = tmpString.concat(" | ||
- | |||
- | return tmpString; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Пример использования: | ||
- | |||
- | <code java> | ||
- | MyLinkedList< | ||
- | for (int i = 0; i < 10; i++) | ||
- | list.addLast(new Integer(i)); | ||
- | System.out.println(list.toString());// | ||
- | </ | ||
- | |||
- | Допишите следующие методы: | ||
- | - Добавление нового элемента в начало списка. | ||
- | - Удаление первого/ | ||
- | - Получение значения первого/ | ||
- | - Получение размера списка. | ||
- | - Получение значения '' | ||
- | - Удаление '' | ||
- | |||
- | ===== Указание к оформлению решения ===== | ||
- | |||
- | Новые методы должны называться в соответствии с методами класса [[http:// | ||
- | |||
- | ===== Задание 4.2 ===== | ||
- | |||
- | С помощью получившегося двусвязного списка напишите решение [[http:// | ||
- | |||
- | ====== Семинар 5 ====== | ||
- | |||
- | Информацию о двоичных деревьях поиска можно прочитать {{: | ||
- | |||
- | ===== Задание 5.1 ===== | ||
- | |||
- | Приведем одну из возможных реализаций двоичного дерева поиска: | ||
- | |||
- | <code java> | ||
- | public class MyBinarySearchTree{ | ||
- | private static class Node{ | ||
- | Integer data = null; | ||
- | Node parent = null; | ||
- | Node left = null; | ||
- | Node right = null; | ||
- | |||
- | Node (int data){ | ||
- | this.data = new Integer(data); | ||
- | } | ||
- | } | ||
- | |||
- | private Node root; | ||
- | |||
- | public MyBinarySearchTree(int data){ | ||
- | root = new Node(data); | ||
- | } | ||
- | |||
- | public void treeInsert(int data){ | ||
- | Node y = null; | ||
- | Node x = root; | ||
- | |||
- | while(x != null){ | ||
- | y = x; | ||
- | if(data < x.data.intValue()) | ||
- | x = x.left; | ||
- | else | ||
- | x = x.right; | ||
- | } | ||
- | |||
- | Node z = new Node(data); | ||
- | z.parent = y; | ||
- | |||
- | if(y == null) | ||
- | root = z; | ||
- | else{ | ||
- | if(data < y.data.intValue()) | ||
- | y.left = z; | ||
- | else | ||
- | y.right = z; | ||
- | } | ||
- | } | ||
- | |||
- | private Node treeSearch(Node x, int data){ | ||
- | if(x == null || data == x.data.intValue()) | ||
- | return x; | ||
- | else if (data < x.data.intValue()) | ||
- | return treeSearch(x.left, | ||
- | else | ||
- | return treeSearch(x.right, | ||
- | } | ||
- | |||
- | private Node treeSearch(int data){ | ||
- | return treeSearch(root, | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Допишите методы '' |