мета-данные страницы
Это старая версия документа!
Полезные ссылки
Семинар 1
Перед началом работы рекомендуется прочитать уроки 1 и 2 из Справочника по Яве.
Пример 1.1
Программа «Hello world»
package com.nsunc.wiki.nbazhenov; public class HelloWorld { public static void main (String[] args){ System.out.println("Hello, World!"); } }
Пример 1.2
В лекции 1 был показан пример класса, являющегося представлением электрической лампочки. Приведем здесь упрощенный вариант этого примера:
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
Создайте пакет com.nsunc.wiki.вашЛогин
. В этом пакете создайте класс SimpleLight
, приведенный выше, и новый класс TestClass
. С помощью TestClass
протестируйте работу методов класса SimpleLight
. Убедитесь в том, что Java присваивает значение полю state
по умолчанию.
Задание 1.1.B
Модифицируйте реализацию SimpleLight
следующим образом:
- Добавьте в класс
SimpleLight
новые целочисленные поляbrightness
(яркость) иstep
(шаг). Сделайте так, чтобы значение поляstep
было по умолчанию равным 100. - Измените код существующих методов так, чтобы при включении лампочки ее яркость принимала значение 1000, а при выключении - 0.
- Напишите метод
dim()
(терять яркость), производящий следующие действия: если яркость лампочки больше значенияstep
, то яркость уменьшается наstep
; в противном случае лампочка выключается и в консоли печатается соответствующее сообщение. - Напишите метод
brighten()
(делать ярче), производящий следующие действия: если яркость лампочки не превосходит значения(1000-step)
, то яркость увеличивается наstep
; в противном случае в консоли печатается сообщение об ошибке.
Протестируйте работу методов класса SimpleLight
.
Замечание: Лампочка считается включенной если и только если ее яркость больше нуля.
Задание 1.1.С
Модифицируйте реализацию SimpleLight
следующим образом:
- Добавьте новое статическое целочисленное поле
maxBrightness
(максимальная яркость). Сделайте так, чтобы по умолчаниюmaxBrightness
принимало значение 1000. - Измените код метода
brighten()
, заменив 1000 наmaxBrightness
. - Напишите 2 статических метода:
getMaxBrightness()
- возвращает значениеmaxBrightness
; иsetMaxBrighness(int a)
- устанавливает значениеmaxBrightness
.
Продемонстрируйте работу статических методов.
Семинар 2
Арифметические операторы
Основные арифметические операторы: сложение (+
), вычитание (-
), умножение (*
), деление (/
), остаток от деления нацело (%
).
Можно использовать сокращенную форму записи операторов:
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
Операторы инкремента и декремента
Оператор инкремента записывается в виде ++
и означает «увеличить на единицу». Оператор декремента записывается в виде --
и означает «уменьшить на единицу». Для каждого из операторов есть две версии: префиксная и постфиксная.
++a; // префиксная версия оператора инкремента a++; // постфиксная версия оператора инкремента
В префиксном варианте сначала выполняется операция, а затем выдается значение. В постфиксном варианте сначала выдается значение, и лишь затем выполняется операция.
int a = 0; System.out.println("1. a = " + ++a); // напечатается: 1. a = 1 System.out.println("2. a = " + a++); // напечатается: 2. a = 1
Операторы сравнения
Операторы сравнения: меньше (<
), больше (>
), меньше или равно (<=
), больше или равно (>=
), равно (==
), не равно (!=
). ==
и !=
применимы для всех примитивных типов данных, остальные не применимы к типу boolean
.
Логические операторы
Основные логические операторы: &&
(конъюнкция, AND), ||
(дизъюнкция, OR), !
(отрицание, NOT). Логические операторы применимы только к значениям типа boolean
.
Задание 2.1
С клавиатуры вводится четыре натуральных числа: d
(номер дня), m
(номер месяца), y
(номер года) и n
. Напечатайте в консоли дату, которая наступит через n
дней после даты d.m.y
.
Пример: Ввели следующие 4 числа: 2, 1, 2012, 58. Через 58 дней после 2 января 2012 года наступает 29 февраля 2012 года, поэтому в консоли должна быть напечатана следующая дата: 29.02.2012
.
Замечание: Год с номером y
является високосным, если либо y
кратно 4, но не кратно 100; либо y
кратно 400. Например, 2000 – високосный год, а 2100, 2200 и 2300 – не високосные годы.
Семинар 3
Задание 3.1
Реализовать алгоритм быстрой сортировки массива.
Описание алгоритма можно найти здесь.
Указания к оформлению решения
- Метод, реализующий быструю сортировку, должен быть записан в отдельном классе. Например, так:
class MySort { static void quickSort (/* Ваш список параметров */){ // Ваш код } }
- В методе
public static void main(String[] args)
другого класса в том же пакете создайте массив, заполните его случайными числами, напечатайте его, проведите сортировку и затем снова напечатайте массив. Например, так:
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-ов: классы, предназначенные для хранения упорядоченной пары и упорядоченной тройки объектов
public class TwoTuple<A,B> { public final A first; public final B second; public TwoTuple(A a, B b) { first = a; second = b; } public String toString() { return "(" + first + ", " + second + ")"; } } public class ThreeTuple<A,B,C> extends TwoTuple<A,B> { public final C third; public ThreeTuple(A a, B b, C c) { super(a, b); third = c; } public String toString() { return "(" + first + ", " + second + ", " + third +")"; } }
Пример работы с этими классами:
TwoTuple<Integer, String> tuple0 = new TwoTuple<Integer, String>(new Integer(10), "text"); System.out.println(tuple0.toString()); // напечатается (10, text) ThreeTuple<Integer, String, Double> tuple1 = new ThreeTuple<Integer, String, Double>(new Integer(10), "text", new Double(0.1)); System.out.println(tuple1.toString()); // напечатается (10, text, 0.1)
Задание 4.1
Приведем одну из возможных реализаций двусвязного списка:
public class MyLinkedList<E> { private static class Node<E>{ E element = null; Node<E> next = null; Node<E> previous = null; Node (E element){ this.element = element; } } private Node<E> head = null; private Node<E> tail = null; private int size = 0; public void addLast(E element){// добавляет новый элемент в конец списка Node<E> tmpNode = new Node<E>(element); 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<E> tmpNode = head; String tmpString = "[" + tmpNode.element.toString(); while (tmpNode != tail){ tmpNode = tmpNode.next; tmpString = tmpString.concat(", " + tmpNode.element.toString()); }; tmpString = tmpString.concat("]"); return tmpString; } }
Пример использования:
MyLinkedList<Integer> list = new MyLinkedList<Integer>(); for (int i = 0; i < 10; i++) list.addLast(new Integer(i)); System.out.println(list.toString());// напечатается [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Допишите следующие методы:
- Добавление нового элемента в начало списка.
- Удаление первого/последнего элемента.
- Получение значения первого/последнего элемента.
- Получение размера списка.
- Получение значения
i
-го элемента списка. - Удаление
i
-го элемента списка.
Указание к оформлению решения
Новые методы должны называться в соответствии с методами класса java.util.LinkedList<E>.