мета-данные страницы
Первый семестр
Урок 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(); }