Факультет Информационных Технологий, 2-й курс, II семестр Курс: Объектно-ориентированное программирование Семинар №1. Вводное занятие План 1. Организационные вопросы, обзор заданий, критерии выставления оценок 2. Введение в Java: JVM, JRE, JSDK 3. IDE Eclipse, запуск и интерфейс 4. Создание и настройка Java проекта в Eclipse 5. “Hello world!” на Java в Eclipse 6. Режим отладки в Eclipse 7. Документация Java и помощь в Eclipse 8. Правила оформления кода на языке Java 9. Введение в Java объекты 10. Примитивные типы и wrapper-классы для примитивных типов 11. Полное и короткое имя класса, import/package 12. Класс java.lang.String 13. Класс java.util.Scanner 14. Класс java.lang.Math Hello world! public class HelloWorld { public static void main (String[] args) { System.out.println("Hello, world"); } } Чтение с консоли import java.util.*; public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(true) { System.out.println("You inputted: "+scanner.next()); } } } Пример класса package ru.nsu.ccfit.anoykin.seminar1; import java.util.Scanner; public class Summator { private static final int SIZE = 5; private int sum; public Summator() { this(0); } 1 Факультет Информационных Технологий, 2-й курс, II семестр Курс: Объектно-ориентированное программирование public Summator(int sum) { this.sum = sum; } public void add(int number) { sum += number; } public int getSum() { return sum; } public static void main(String args[]) { System.out.println("Input " + SIZE + " numbers:"); Summator summator = new Summator(); Scanner scanner = new Scanner(System.in); for (int i = 0; i < SIZE; i++) { System.out.print("Number #"+(i+1)+": "); summator.add(scanner.nextInt()); } System.out.println("\nSum is " + summator.getSum()); } } Задание 1-1: Создание перспективы в Eclipse Сделать перспективу с именем Universal, чтобы она выглядела так: Примечания: 2 Факультет Информационных Технологий, 2-й курс, II семестр Курс: Объектно-ориентированное программирование 1. Создание перспективы через Window -> Save Perspective As … 2. Поиск нужного View через Window -> Show View -> Other … Задание 1-2: Решение системы квадратных уравнений Написать программу решения квадратного уравнения. Коэффициенты уравнения вводятся с консоли. Программа пишет корни уравнения, либо пишет, что система неразрешима. Корни уравнения вычисляются как: X1 = (-b + sqrt(b*b – 4ac)) / 2a X2 = (-b - sqrt(b*b – 4ac)) / 2a Примечания: 1. Для ввода/вывода данных с консоли использовать Window -> Show View -> Console (открывается специальное view) 2. Для вычисления квадратного корня java.lang.Math.sqrt() 3. Для вывода на экран использовать класс System 4. Для считывания данных использовать класс java.util.Scanner 5. Приложение должно лежать в пакете /ru/nsu/ccfit/ФАМИЛИЯ/seminar1/ Задание 1-3: Программа GuessNumber Реализовать игру “угадай число”. Программа загадывает случайное число в пределах от 1 до 100. Задача игрока - отгадать это число не более чем за восемь попыток. После каждой попытки программа подсказывает больше загаданное число или меньше предполагаемого. При проигрыше программа показывает загаданное число. Примечания: 1. Для генерации случайного числа использовать java.lang.Math.random() 2. Для вывода на экран использовать класс System 3. Для считывания данных использовать класс java.util.Scanner 4. Приложение должно лежать в пакете /ru/nsu/ccfit/ФАМИЛИЯ/seminar1/ FAQ & Best Practices Как оформить задание для отсылки по e-mail? 1. Отформатировать код: a. Выбираете проект в Package Explorer (самый верхний элемент в виде открытой папки) b. Нажимаете правую клавишу мыши и выбираете Source -> Format c. Можно отформатировать отдельно один редактируемый файл, используя Ctr+Shift+F Не забудьте записать файл после форматирования, например через Ctrl+S 2. Сделать архив (ZIP или RAR) с вашим проектом. Из Eclipse это делается так: a. Выбираете проект в Package Explorer (самый верхний элемент в виде открытой папки) b. Нажимаете правую клавишу мыши и выбираете пункт Export c. Выбираете General->Archive File и нажимаете Next d. Задаете путь до файла и параметры экспорта. Затем нажимаете Finish e. Проверьте, что созданный архив содержит все нужные файлы проекта. 3. Послать письмо на адрес преподавателя 4. Заголовок письма должен соответствовать такому шаблону: 3 Факультет Информационных Технологий, 2-й курс, II семестр Курс: Объектно-ориентированное программирование ГРУППА, ФАМИЛИЯ, НОМЕР ЗАДАНИЯ Например: Группа 5203, Иванов, Задание 1-2 Group 5203, Ivanov Ivan, Task 1-2 Как настроить Eclipse, чтобы он сразу указывал весь пакет в директиве import, а не один класс 1. Зайти в Window->Preferences->Java->Code Style->Organize Imports 2. Установить параметр «Number of imports needed for .*» как 1 (вместо 99) 3. Установить параметр «Number of static imports needed for .*» как 1 (вместо 99) Как правильно оформить конструктор? Пример правильного оформления (используйте this): public class Summator { private int sum; private int num; public Summator(int sum, int num) { this.sum = sum; this.num = num; } } В Eclipse можно автоматически сгенерить конструктор: 1. В редакторе нажать правую клавишу мыши 2. Выбрать Source -> Generate Constructor Using Fields … Используйте if else вместо нескольких if Вот такой код: if (discriminant < 0) { System.out.println("There are no solutions"); } if (discriminant == 0) { System.out.println("One solution"); } if (discriminant > 0) { System.out.println("Two solutions"); } Лучше оформлять так: if (discriminant < 0) { System.out.println("There are no solutions"); } else if (discriminant == 0) { System.out.println("One solution"); } else { System.out.println("Two solutions"); } В Java можно использовать метки (labels) для выхода во внешний цикл public class Test { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); 4 Факультет Информационных Технологий, 2-й курс, II семестр Курс: Объектно-ориентированное программирование TOP: while (true) { System.out.println("Summator of 10 numbers. Input -1 to reset. Input -10 to exit."); int sum = 0; for (int i = 0; i < 10; i++) { int tmp = scanner.nextInt(); if (tmp == -1) { continue TOP; // start external cycle again } else if (tmp ==-10) { break TOP; // stop external cycle } else { sum += tmp; } } System.out.println("Sum is: " + sum); } } } Именование методов класса для доступа к полям Обычно класс содержит только private поля. Для доступа к ним пишут так называемые setters и getters. Например: public class Test { private int fieldOne; private boolean fieldTwo; private String str; public int getFieldOne() { return fieldOne; } public void setFieldOne(int fieldOne) { this.fieldOne = fieldOne; } public boolean isFieldTwo() { return fieldTwo; } public void setFieldTwo(boolean fieldTwo) { this.fieldTwo = fieldTwo; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } } Эти методы надо генерить АВТОМАТИЧЕСКИ через Eclipse: 1. Находясь в редакторе, нажать правую клавишу мыши 2. Выбрать Source -> Generate Getters and Setters … Обратите внимание, что для boolean переменных создается метод isX(), а не getX(). 5