Академический Документы
Профессиональный Документы
Культура Документы
ЖУАНЫШЕВ ИЛЬЯС
BITLAB TEAM
Оглавление
Что такое язык программирования JAVA? .............................................................................................. 4
Введение, первая программа. Переменные, примитивные типы данных. ....................................... 4
Установка и запуск первой программы................................................................................................. 4
Переменные, примитивные типы данных. ............................................................................................. 7
Целочисленные типы .............................................................................................................................. 7
Типы с плавающей точкой ...................................................................................................................... 8
Логический тип ........................................................................................................................................ 8
Ссылочные типы ...................................................................................................................................... 8
Строки....................................................................................................................................................... 9
Типы переменных, локальные переменные, статические переменные .......................................... 10
Локальные переменные ....................................................................................................................... 10
Статические переменные ..................................................................................................................... 10
Базовые операторы, арифметические, логические............................................................................. 12
Логические операторы ......................................................................................................................... 12
Операторы сравнения........................................................................................................................... 12
Класс Scanner, ввод и вывод данных. .................................................................................................... 13
Условия if, if-else, switch-case. ................................................................................................................. 17
if - else ..................................................................................................................................................... 17
else-if ....................................................................................................................................................... 18
switch ...................................................................................................................................................... 19
Циклы: while, do-while, for. ..................................................................................................................... 24
while ........................................................................................................................................................ 24
do-while .................................................................................................................................................. 24
for ............................................................................................................................................................ 25
Массивы, одномерные массивы ............................................................................................................ 34
Строки, класс String .................................................................................................................................. 48
Методы класса String ............................................................................................................................ 48
Методы и аргументы. .............................................................................................................................. 53
Классы и объекты ..................................................................................................................................... 60
Конструктор ........................................................................................................................................... 60
Методы в классах. ................................................................................................................................. 62
BITLAB TEAM 2
JAVA STANDARD EDITION
BITLAB TEAM 3
JAVA STANDARD EDITION
История:
Java представляет собой язык программирования и платформу вычислений, которая была
впервые выпущена Sun Microsystems в 1995 г. Существует множество приложений и веб-сайтов,
которые не работают при отсутствии установленной Java, и с каждым днем число таких веб-сайтов
и приложений увеличивается.
Java отличается быстротой, высоким уровнем защиты и надежностью. От портативных
компьютеров до центров данных, от игровых консолей до суперкомпьютеров, используемых для
научных разработок, от сотовых телефонов до сети Интернет — Java повсюду.
int a = 10;
int b = 20;
System.out.println(a + b);
}
}
В этом примере мы создаем две переменные с типами данных int (целое число), которые
равняются 10 и 20 соответственно, и в итоге выводиться их сумма.
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
BITLAB TEAM 4
JAVA STANDARD EDITION
Соответственно, вам нужно будет выбрать нужный файл относительно вашей операционной
системы.
Далее, после скачки, вам нужно будет создать первую программу. Создайте файл Main.java так как
имя нашего класса тоже называется Main. (Это очень важно, чтобы имя класса и имя файла были
одинаковыми.)
После создания файла, вы должны набрать в ней строки кода, что мы рассматривали выше.
Теперь нам нужно будет создать переменную среду в операционной системе. Скорее всего наша
библиотека будет установлена в папке:
C:\Program Files\Java
В этой папке у нас установлено две папки, JDK I JRE. JRE (Java Runtime Environment) нам нужен для
запуска, а вот основная библиотека установлена в папке JDK (Java Development Kit)
Мы выбираем папку JDK, и в ней есть папка bin. После, мы копируем полный путь к этой папке, и
создаем переменную среду.
BITLAB TEAM 5
JAVA STANDARD EDITION
Открываем командную строку, в котором мы заходим в нашу папку, где находиться наш Main.java
файл. (Чтобы войти в директорию, наберите cd ‘наименование папки’, чтобы выйти из директории,
наберите cd..)
Далее, компилируем наш файл с помощью команды javac Main.java, и если нету ошибок, то
запускаем с помощью команды java Main.java
BITLAB TEAM 6
JAVA STANDARD EDITION
Логический – boolean
Целочисленные типы
Целочисленные типы различаются между собой только диапазонами возможных значений.
BITLAB TEAM 7
JAVA STANDARD EDITION
}
}
double a, b = 4.12;
a = 22.1 + b;
float pi = 3.14f;
float anotherPi = (float) 3.14
double c = 27;
double d = pi * c;
System.out.println(d);
Логический тип
Тип Размер (бит) Значение
boolean 8 (в массивах), 32 (не в массивах используется int) true (истина) или false (ложь)
Ссылочные типы
Ссылочные типы - это все остальные типы - классы, перечисления и интерфейсы, например,
объявленные в стандартной библиотеке Java, а также массивы.
BITLAB TEAM 8
JAVA STANDARD EDITION
Строки
Строки - это объекты класса String, они очень распространены, поэтому в некоторых случаях
обрабатываются по-другому в отличии от всех остальных объектов. Строковые литералы
записываются в двойных кавычках.
public class Main {
BITLAB TEAM 9
JAVA STANDARD EDITION
Переменная предоставляется нам именем хранения, чтобы нашей программой можно было
манипулировать. Каждая переменная имеет конкретный тип, который определяет размер и
размещение её в памяти; диапазон значений, которые могут храниться в памяти; и набор операций,
которые могут быть применены к переменной.
Локальные переменные
Локальные переменные объявляются в методах, конструкторах или блоках.
В Java не существует для локальных переменных значения по умолчанию, так что они должны
быть объявлены и начальное значение должны быть присвоено перед первым использованием.
Статические переменные
Статические переменные - которые объявляются со статическим ключевым словом static в
классе, но за пределами метода, конструктора или блока.
Модификатор static в Java напрямую связан с классом, если поле статично, значит оно
принадлежит классу, если метод статичный, аналогично — он принадлежит классу. Исходя из этого,
можно обращаться к статическому методу или полю используя имя класса. Например, если поле
name статично в классе User, значит, вы можете обратиться к переменной запросом вида:
User.name.
Там будет только одна копия каждой статической переменной в классе, независимо от того,
сколько объектов создано из него.
public class Main {
BITLAB TEAM 10
JAVA STANDARD EDITION
Значения по умолчанию такое же, как и у переменных экземпляра. Для чисел по умолчанию
равно 0, для данных типа Boolean - false; и для ссылок на объект - null. Значения могут быть
присвоены при объявлении или в конструкторе. Кроме того, они могут быть присвоены в
специальных блоках статического инициализатора.
BITLAB TEAM 11
JAVA STANDARD EDITION
Логические операторы
Существует несколько бинарных логических операторов и один унарный. В качестве аргументов
для всех этих операторов выступают логические литералы (константы), логические переменные и
выражения, имеющие логическое значение. Логические операторы работают только с операндами
типа boolean.
&& — логическое И, бинарная операция, возвращает истинное значение тогда и только тогда,
когда оба операнда истины.
|| — логическое ИЛИ, бинарная операция, возвращает истинное значение, когда хотя бы один из
операндов истинный.
Оператор Описание
& Логическое AND (И)
&& Сокращённое AND
| Логическое OR (ИЛИ)
|| Сокращённое OR
^ Логическое XOR (исключающее OR (ИЛИ))
! Логическое унарное NOT (НЕ)
== Равно
!= Не равно
BITLAB TEAM 12
JAVA STANDARD EDITION
Операторы сравнения
Большинство операторов сравнения применимы к числовым значениям. Всё это бинарные
операторы, имеющие два числовых аргумента, но возвращающие логическое значение.
BITLAB TEAM 13
JAVA STANDARD EDITION
Класс Scanner в Java позволяет читать данные полученные, например, из консоли или файла.
Класс находится в пакете java.util. Для взаимодействия с консолью нам необходим класс
System.
Для работы с потоком ввода нам необходимо создать объект класса Scanner, при создании
указав, с каким потоком ввода он будет связан. Стандартный поток ввода (клавиатура) в Java
представлен объектом — System.in. А стандартный поток вывода (дисплей) — уже знакомым вам
объектом System.out.
import java.util.Scanner;
BITLAB TEAM 14
JAVA STANDARD EDITION
Задание 1:
Задание 2:
Задание 3:
Ввод:
Ilyas
Zhuanyshev
28
Kazakhstan
Вывод:
Name: Ilyas
Surname: Zhuanyshev
Age: 28
Country: Kazakhstan
Задание 4:
Напишите программу в котором я ввожу два целостных чисел, и если первое число больше
второй, то программа выведет true, иначе false.
Задание 5:
Ввод:
10, 20, 30
Вывод:
a + b + c = 60
a – b – c = -50
a * b * c = 6000
BITLAB TEAM 15
JAVA STANDARD EDITION
Задание 6:
Практические задачи
Задание 1:
Напишите программу, где я складываю сумму двух целостных чисел a = 100 и b = 200?
Задание 2:
Напишите программу, где я умножаю два a и b из консоли?
Задание 3:
Напишите программу в котором я запрашиваю университет, факультет, предмет, и в конце
программа выводит данные пользователя в консоль.
Ввод:
KBTU
Computer
JAVA
Вывод:
University: KBTU
Faculty: Computer
Subject: JAVA
Задание 4:
Напишите программу в котором я ввожу три целостных чисел a, b и c, и если сумма a и b больше c,
то программа выведет true, иначе false.
Задание 5:
Выполните данную математическую операцию где я ввожу x, y и z с консоли. Выполните данную
операцию: x4 + 4xy2 – 4yz + z4
BITLAB TEAM 16
JAVA STANDARD EDITION
if - else
В программировании мы можем создавать условия, для выполнения определенных задач, где
мы хотим, чтобы программа действовала по определенным правилам. Условный оператор if часто
применяется программистами и имеется во всех языках программирования. Оператор if является
основным оператором выбора в Java и позволяет выборочно изменять ход выполнения программы.
Действия, написанные в операторе else, будут выполнены, только если значение if равно false.
import java.util.Scanner;
if(mark>=50){
}else{
}
}
}
В данном примере мы видим, как программа проверяет прошел ли студент курс или нет?
BITLAB TEAM 17
JAVA STANDARD EDITION
else-if
Далее, программу можно улучшить с помощью оператора else if добавляя условия.
if(mark>=90){
}else if(mark>=80){
}else if(mark>=70){
}else if(mark>=60){
}else{
}
}
}
Помните, программа выполняет одно из этих условий если вы используете оператор else if. То
есть, например, студент получил 86 за курс, и оценка 86 подходит под второе, третье и четвертое
условие. Но так как второе условие выполнится раньше, то больше под остальные условия оно
выполняться не будет. Далее, все зависит от того каким образом вы разработаете программу.
BITLAB TEAM 18
JAVA STANDARD EDITION
switch
Команду switch называют командой выбора. Выбор осуществляется в зависимости от
целочисленного выражения. Например:
import java.util.Scanner;
switch(day){
}
System.out.println(dayValue);
}
}
Данная программа смотрит значение переменной day, и соответственно выполняет строку кода
после двоеточий. Если ни одно условие не подходит под переменную day, то выполняется строка
кода после default.
BITLAB TEAM 19
JAVA STANDARD EDITION
Задание 1:
Напишите программу, где я складываю ввожу число n, и если оно между 10 и 20, то программа
выведет YES иначе NO.
Задание 2:
Напишите программу где я ввожу сумму внесенной валюты и выберу на какую валюту хочу
перевести. (Курс USD – 320, EUR – 360, GBP - 420)
Ввод:
Insert amount in KZT:
1000
Choose currency:
[1] USD
[2] EUR
[3] GBP
2
Вывод:
2.77 EUR
Задание 3:
Задание 4:
Напишите программу где я ввожу логин и пароль. И если они совпадают, то мы выводим
Authentication completed, иначе Invalid login or password.
(Логин должен быть user, пароль - qwerty)
BITLAB TEAM 20
JAVA STANDARD EDITION
Ввод:
Введите логин:
ilyas
Введите пароль:
qwerty
Вывод:
Invalid login or password
Ввод:
Введите логин:
user
Введите пароль:
qwerty
Вывод:
Authentication completed
*** Задание 5:
BITLAB TEAM 21
JAVA STANDARD EDITION
Ввод:
Вывод:
Практические задачи
Задание 1:
Напишите программу, где вы вводите две целостных чисел, и программа должна вывести что они
равны, больше, или меньше.
Ввод:
7 10
Вывод:
7 less than 10
Ввод:
45 45
Вывод:
They are equal
Ввод:
55 6
Вывод:
55 is greater than 6
BITLAB TEAM 22
JAVA STANDARD EDITION
Задание 2:
Напишите программу, где вы вводите две целостных чисел, и программа должна вывести что они
равны, больше, или меньше.
радиус
Ввод:
7 10
Вывод:
7 less than 10
Ввод:
45 45
Вывод:
They are equal
Ввод:
55 6
Вывод:
55 is greater than 6
BITLAB TEAM 23
JAVA STANDARD EDITION
while
Оператор цикла while есть практически во всех языках программирования. Он повторяет оператор
или блок операторов до тех пор, пока значение его управляющего выражения истинно.
Если условие является верным, то выполнится блок кода, и после выполнения обратно будет
проверяться условие, до тех пор, пока условие не будет неверным.
Например:
public class Main {
public static void main(String[] args) {
int i = 0;
while(i<10){
System.out.println("Hello BITLAB");
i++;
}
}
}
В данном примере блок кода будет выполняться до тех пор пока условие i<10 не станет
неверным. Для этого, мы каждый раз увеличиваем значение i na 1, чтобы после нескольких
выполнений блока кода i++, значение i стало равна 10, что означает 10<10, то есть неверно. Таким
образом мы получим цикл, который будет выполняться 10 раз, то есть 10 раз выведет "Hello BITLAB".
do-while
Конструкция цикла:
do{
блок кода
}(условие);
BITLAB TEAM 24
JAVA STANDARD EDITION
Отличие цикла do-while от цикла while состоит в том, что цикл do-while выполняется по крайней
мере один раз, даже если условие изначально ложно. В цикле while такое не произойдёт. Цикл do-
while используется реже, чем while.
Например:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int size = in.nextInt();
int i = 0;
do{
System.out.println("Hello BITLAB");
i++;
} while(i<size);
}
}
В данном примере, если введенное значение переменной size будет равняться 0, что
означает 0<0, то есть неверно, но все равно один раз блок кода будет выполняться. Таким образом,
блок кода все равно как минимум один раз будет выполняться.
for
Конструкция for управляет циклами. Команда выполняется до тех пор, пока управляющее
логическое выражение не станет ложным.
Блок кода будет выполняться, пока условие не станет неверным. Сначала происходит
инициализация, затем проверяется условие, и если оно верное, то выполняется блок кода, затем
после выполнения блока кода идет итерация (то есть шаг).
BITLAB TEAM 25
JAVA STANDARD EDITION
Например:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int size = in.nextInt();
for(int i=0;i<size;i++){
System.out.println("Hello BITLAB");
}
}
}
Данная программа будет выполнять блок кода (Вывод текста: Hello BITLAB), столько раз, чему
будет равно значение size.
BITLAB TEAM 26
JAVA STANDARD EDITION
Задание 1:
Напишите программу, в котором я ввожу число a и b. Программа должна вывести мне умножение
этих двух чисел. (Не используйте оператор умножения *, вместо этого - цикл.)
Задание 2:
Ввод:
3
Вывод:
1 1
2 4
3 9
Ввод:
10
Вывод:
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
Задание 3:
Ввод:
3890
Вывод:
3
6.67
BITLAB TEAM 27
JAVA STANDARD EDITION
Ввод:
10 45 87 34 12 0
Вывод:
5
37.6
Задание 4:
Ввод:
1230
Вывод:
3
Ввод:
3 17 8 9 0
Вывод:
17
37.6
Задание 5:
Ввод:
3
Вывод:
9
Ввод:
15
Вывод:
225
Задание 6:
Вводим число a и b. Программа должна вывести таблицу степени an, где n это числа которые идут
от 0 до b.
BITLAB TEAM 28
JAVA STANDARD EDITION
Ввод:
72
Вывод:
0 1
1 7
2 49
Ввод:
2 10
Вывод:
0 1
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 1024
Практические задачи
Задание 1:
Напишите программу, в котором я ввожу число n. Программа должна вывести умножение первых
n чисел. 1*2*3*4*5...n
Ввод:
3
Вывод:
6
Ввод:
10
Вывод:
3628800
BITLAB TEAM 29
JAVA STANDARD EDITION
Задание 2:
Напишите программу, которая запрашивает числа. Программа должна остановиться запрашивать,
когда мы вводим 0.
Программа должна вывести умножение всех введенных чисел.
Ввод:
3.1 2.4 1.2 0
Вывод:
8.928
Ввод:
5.2 -2.3 0
Вывод:
-11.96
Задание 3:
Напишите программу, которая запрашивает числа. Программа должна остановиться запрашивать,
когда мы вводим 0.
Программа должна вывести сумму нечетных элементов, которые мы вводили.
Ввод:
340
Вывод:
3
Ввод:
-3 5 8 2 7 0
Вывод:
9
BITLAB TEAM 30
JAVA STANDARD EDITION
Задание 4:
Программа запрашивает число n. Программа должна вывести сумму первых n чисел в
последовательности 1+1/2+1/3+1/4 …
Ввод:
3
Вывод:
1.83333
Ввод:
15
Вывод:
3.31823
Задание 5:
Вводим число a и b. Программа должна вывести ab не используя математические операторы
степени. Используйте цикл.
Ввод:
72
Вывод:
49
Ввод:
2 10
Вывод:
1024
BITLAB TEAM 31
JAVA STANDARD EDITION
Задание 1:
Ввод:
53
Вывод:
*****
*****
*****
Задание 2:
Ввод:
5
Вывод:
*
**
***
****
*****
Задание 3:
Ввод:
5
Вывод:
*
**
***
****
*****
BITLAB TEAM 32
JAVA STANDARD EDITION
Задание 4:
Ввод:
5
Вывод:
*
***
*****
*******
*********
BITLAB TEAM 33
JAVA STANDARD EDITION
Массив - тип или структура данных в виде набора компонентов (элементов массива),
расположенных в памяти непосредственно друг за другом. При этом доступ к отдельным
элементам массива осуществляется с помощью индексации, то есть через ссылку на массив с
указанием номера (индекса) нужного элемента. В языке JAVA массив удобен для работы с большим
количеством однотипных данных.
int[] books;
В данном примере, значение элементов равна 0, так как мы не указали значение каждого
элемента. Например, для числовых значений начальное значение будет 0. Для массива типа
boolean начальное значение будет равно false, для массива типа char - '\u0000', для массива типа
класса - null.
В данном примере, мы создали массив, сразу заполнив его элементы. Размер данного массива
является 5.
int[] books = {1, 4, 5, 7, 8};
System.out.println(books[2]);
Программа выведет число 5, то есть третий элемент массива. Таким образом, чтобы вывести
первый элемент массива нам надо обратиться к индексу 0. А последний элемент - 4. Чтобы
получить размер массива, мы обратимся к полю length.
int[] books = {1, 4, 5, 7, 8};
System.out.println(books.length);
BITLAB TEAM 34
JAVA STANDARD EDITION
Массивы можно использовать в циклах, например, если мы хотим вывести все элементы.
Программа выведет:
marks[0] = 40
marks[1] = 56
marks[2] = 75
marks[3] = 95
marks[4] = 88
BITLAB TEAM 35
JAVA STANDARD EDITION
Задание 1:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Выведите в конце все элементы в обратном порядке.
Ввод:
10
6 19 26 -3 46 8 5 -65 90 25
Вывод:
25 90 -65 5 8 46 -3 26 19 6
Задание 2:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Программа должна вывести сумму и среднее значение введенных чисел.
Ввод:
3
492
Вывод:
15 5
Задание 3:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Программа должна вывести максимальное и минимальное значение в массиве.
Ввод:
10
6 19 26 9 46 8 5 65 90 25
Вывод:
5 90
BITLAB TEAM 36
JAVA STANDARD EDITION
Задание 4:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Программа должна вывести сумму и среднее значение исключая максимальное и
минимальное значение.
Ввод:
10
6 19 26 9 46 8 5 65 90 25
Вывод:
204
Задание 5:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Далее, программа запрашивает пользователя число m. Если число m существует в нашем
массиве, программа должна вывести слово "Yes" и вывести индекс (расположение, адрес)
данного числа. Иначе вывести слово "No".
Ввод:
3
492
8
Вывод:
No
Ввод:
10
6 19 26 3 46 8 5 65 90 25
46
Вывод:
Yes
Index: 4
Задание 1:
BITLAB TEAM 37
JAVA STANDARD EDITION
Ввод:
3
123
123
Вывод:
Yes
Ввод:
5
19056
19156
Вывод:
No
Задание 2:
Ввод:
23
0 -2 3
-5 8 -8
Вывод:
3
0x3
x8x
Ввод:
45
2 -4 -5 6 7
0 1 -2 9 11
-1 -1 8 3 0
3 4 567
BITLAB TEAM 38
JAVA STANDARD EDITION
Вывод:
5
2xx67
0 1 x 9 11
xx830
34567
Задание 3:
Ввод:
23
0 -2 3
-5 8 -8
Вывод:
1
2
Ввод:
45
2 -4 -5 6 7
0 1 -2 9 11
-1 -1 8 3 0
3 4 567
Вывод:
2
1
2
0
Задание 4:
BITLAB TEAM 39
JAVA STANDARD EDITION
Ввод:
3
0 -2 3
-5 8 -8
1 2 3
Вывод:
x -2 3
-5 x -8
1 2 x
Ввод:
5
2 -4 -5 6 9
0 1 -2 9 0
-1 -1 8 3 3
3 4 561
7 11 0 7 12
Вывод:
x -4 -5 6 9
0 x -2 9 0
-1 -1 x 3 3
3 4 5x1
7 11 0 7 x
Задание 5:
Ввод:
3
123
274
346
Вывод:
Yes
BITLAB TEAM 40
JAVA STANDARD EDITION
Ввод:
3
123
256
380
Вывод:
No
Практические задачи
Задание 1:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Выведите в конце только положительные элементы.
Ввод:
10
6 19 26 -3 46 8 5 -65 90 25
Вывод:
6 19 26 46 8 5 90 25
Задание 2:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Программа должна заменить местами вывести максимального и минимального элемента.
Ввод:
3
492
Вывод:
429
BITLAB TEAM 41
JAVA STANDARD EDITION
Ввод:
10
6 19 26 9 46 8 5 65 90 25
Вывод:
6 19 26 9 46 8 90 65 5 25
Задание 3:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Программа должна вывести умножение всех элементов, не равных 0.
Ввод:
4
9240
Вывод:
72
Ввод:
10
6 19 0 -3 4 8 0 -6 9 5
Вывод:
2954880
Задание 4:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Программа должна вывести с начала все положительные элементы, затем нули и затем
только отрицательные элементы.
Ввод:
4
9 -2 4 0
Вывод:
9 4 0 -2
BITLAB TEAM 42
JAVA STANDARD EDITION
Ввод:
10
6 19 0 -3 4 8 0 -6 9 5
Вывод:
6 19 4 8 9 5 0 0 -3 -6
Задание 5:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Затем мы вводим число m. Программа должна вывести среднее значение всех элементов,
которые больше m.
Ввод:
4
0 -2 4 0
1
Вывод:
4
Ввод:
10
6 19 0 -3 4 8 0 -6 9 5
5
Вывод:
10.5
Задание 6:
Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в
массив. Программа должна вывести сумму всех чисел которые находятся между нулями.
Ввод:
4
0 -2 4 0
Вывод:
2
BITLAB TEAM 43
JAVA STANDARD EDITION
Ввод:
10
6 19 0 -3 4 8 0 -6 9 5
Вывод:
9
Задание 1:
Напишите программу в котором я ввожу два числа N и M. Затем создаю двумерный массив NxM.
Далее мы заполняем этот массив числами. Программа должна вывести максимальный элемент в
каждой строке.
Ввод:
23
0 -2 3
-5 8 -8
Вывод:
3
8
Ввод:
45
2 -4 -5 6 7
0 1 -2 9 11
-1 -1 8 3 0
3 4 567
Вывод:
7
11
8
7
Задание 2:
BITLAB TEAM 44
JAVA STANDARD EDITION
Ввод:
3
0 -2 3
-5 8 -8
1 2 3
Вывод:
x -2 x
-5 x -8
x 2 x
Ввод:
5
2 -4 -5 6 9
0 1 -2 9 0
-1 -1 8 3 3
3 4 561
7 11 0 7 12
Вывод:
x -4 -5 6 x
0 x -2 x 0
-1 -1 x 3 3
3 x 5x1
x 11 0 7 x
Задание 3:
Ввод:
3
123
274
346
Вывод:
346
274
123
BITLAB TEAM 45
JAVA STANDARD EDITION
Ввод:
5
89015
52376
07894
12345
76423
Вывод:
12345
76423
07894
89015
52376
Задание 4:
Напишите программу в котором я ввожу два числа N и M. Затем создаю двумерный массив NxM.
Далее мы заполняем этот массив числами. Программа должна заменить максимальный элемент
на минимальный элемент по колонке.
Ввод:
33
123
274
346
Вывод:
376
224
143
Ввод:
23
1 6 10
259
Вывод:
259
1 6 10
BITLAB TEAM 46
JAVA STANDARD EDITION
Задание 5:
Напишите программу в котором я ввожу два числа N и M. Затем создаю двумерный массив NxM.
Далее мы заполняем этот массив числами. Затем, мы вводим число k. Программа должна вывести
первые k отрицательных элементов в каждой колонке, как показано в примере.
Ввод:
45
2 -4 -5 6 7
0 1 -2 9 11
-1 -1 8 3 0
3 4 567
1
Вывод:
2 -4 -5 6 7
0 1 -2 9 11
-1 -1 8 3 0
3 4 567
_ _ ___
-1 -4 -5 x x
BITLAB TEAM 47
JAVA STANDARD EDITION
Строки - это объекты класса String, они очень распространены, поэтому в некоторых случаях
обрабатываются по-другому в отличии от всех остальных объектов. Строковые литералы
записываются в двойных кавычках.
Например:
String text = "BITLAB Team";
BITLAB TEAM 48
JAVA STANDARD EDITION
if(str1.equals(str2)){
System.out.println("Строки равны");
}else{
System.out.println("Строки не равны");
}
public int length()
System.out.println(name.length()); // возвращает 9
System.out.println(text.trim());
BITLAB TEAM 49
JAVA STANDARD EDITION
Практические задачи
Задание 1:
Мы вводим строку (текст) в нашу программу. Программа должна определить, является ли наш
текст "Палиндром"-ом или нет. Палиндром - это когда текст читается так же одинаково если ее
читать в обратном порядке.
Ввод:
kazak
Вывод:
Yes
Ввод:
assets
Вывод:
No
Задание 2:
Мы вводим строку (текст) в нашу программу. Программа должна вывести каждую букву с ее
количеством в тексте.
Ввод:
universe
Вывод:
u1
n1
i1
v1
e2
r1
s1
BITLAB TEAM 50
JAVA STANDARD EDITION
Ввод:
macbookair
Вывод:
m1
a2
c1
b1
o2
k1
i1
r1
Задание 3:
Мы вводим строку (текст) в нашу программу. Программа должна количество гласных букв.
Гласные буквы: a, e, i, o, u
Ввод:
kayak
Вывод:
Ввод:
universe
Вывод:
Задание 4:
Вводим в программу две строки s1 и s2. Если s2 содержится внутри слова s1, то программа
выводит "Yes", иначе "No".
Ввод:
universe
ivery
BITLAB TEAM 51
JAVA STANDARD EDITION
Вывод:
No
Ввод:
macbookair
book
Вывод:
Yes
Задание 5:
Ввод:
universe
ivery
Вывод:
No
Ввод:
macbookair
irakoobcam
Вывод:
Yes
BITLAB TEAM 52
JAVA STANDARD EDITION
Методы и аргументы.
System.out.println(sum);
}
public static int getSum(int a, int b){
return a + b;
}
}
В данном примере мы создаем метод getSum() который берет два введенных числа с аргумента
и возвращает их сумму. Методы в программе могут упростить задачу разработчику, если он
собирается несколько раз использовать ее, или разбить программу на определенные блоки кода.
public - в данном методе означает что метод доступен всем классам, void - это тип метода, который
он возвращает, static - означает что метод статичный, то есть для его использования, нам не надо
создавать отдельный экземпляр объекта класса Main, мы можем напрямую к нему обратиться
таким образом: Main.getSum(10,20); или изнутри главного метода main как выше показано на
примере.
Тип результата, который должен возвращать метод может быть любым, в том числе и типом
void - в тех случаях, когда возвращать результат не требуется. Список формальных параметров или
аргументы - это последовательность пар тип данных, разделенных запятыми. Если у метода
параметры отсутствуют, то после имени метода должны стоять пустые круглые скобки.
BITLAB TEAM 53
JAVA STANDARD EDITION
for(int i=0;i<squad.length;i++){
System.out.println(squad[i]);
}
}
}
BITLAB TEAM 54
JAVA STANDARD EDITION
Задание 1:
Ввод:
12 0 9
Вывод:
12
Ввод:
89 -34 432
Вывод:
432
Задание 2:
Ввод:
algorithmization
Вывод:
7
Ввод:
university
Вывод:
4
Задание 3:
Напишите метод, который принимает в аргументах массив целостных чисел, в итоге программа
должна вывести количество элементов не равных 0.
Ввод:
3
892
BITLAB TEAM 55
JAVA STANDARD EDITION
Вывод:
3
Ввод:
8
-2 0 3 4 0 12 3 5
Вывод:
6
Задание 4:
Создайте метод который принимает двумерный массив целостных чисел. Метод должен вывести
в какой строке меньше всего содержится элементов не равных 0.
Ввод:
33
854
009
106
Вывод:
1
Ввод:
34
1000
3010
6097
Вывод:
3
Задание 5:
Создайте метод который принимает в аргументы двумерный массив целостных чисел, в итоге
метод должен возвращать массив, заменив элементы первых строк с последними.
Ввод:
33
854
009
106
BITLAB TEAM 56
JAVA STANDARD EDITION
Вывод:
106
009
854
Ввод:
34
-4 -5 -5 5
8 4 -7 6
-6 -8 9 4
Вывод:
-6 -8 9 4
8 4 -7 6
-4 -5 -5 5
Практические задачи
Задание 1:
Создайте такой метод, который принимает в аргументы массив строк. Метод внутри должен
создать массив строк, в котором содержаться строки, у которых количество гласных букв больше
4. В итоге метод должен возвращать этот массив.
Ввод:
arman
erbolat
armagedon
avadakedavra
lamusicasuena
Вывод:
avadakedavra
lamusicasuena
Задание 2:
Создайте такой метод, который принимает в аргументы массив целостных чисел, и определенное
целостное число n. Метод в итоге должен вывести те числа в массиве, значение которых
совпадают с их индексами и не делятся на число n.
Ввод:
3
516
2
BITLAB TEAM 57
JAVA STANDARD EDITION
Вывод:
1
Ввод:
10
0713852409
3
Вывод:
05
Задание 3:
Создайте такой метод, который в аргументы принимает две строки text, subtext. Если subtext
содержится в строке text, то метод возвращает "Yes", иначе "No".
Ввод:
blossom loss
Вывод:
Yes
Ввод:
university sink
Вывод:
No
Задание 4:
Создайте такой метод, который принимает в аргументы массив целостных чисел. Метод должен
возвращать массив целостных чисел, в котором содержится уникальные элементы. (Не
повторяющийся числа).
Ввод:
3
516
Вывод:
516
Ввод:
10
0713853408
Вывод:
7154
BITLAB TEAM 58
JAVA STANDARD EDITION
Задание 5:
Создайте такой метод, который принимает в аргументы двумерный массив целостных чисел.
Метод должен возвращать сумму всех чисел, у которых индексы по колонке и по строке нечетные.
Ввод:
33
854
009
106
Вывод:
0
Ввод:
34
-4 -5 -5 5
8 4 -7 6
-6 -8 9 4
Вывод:
10
BITLAB TEAM 59
JAVA STANDARD EDITION
Классы и объекты
Например, если брать в теории, то скажем что “Человек” является определенным классом (то
есть каким-то типом данных), а вот каждый человек, является его объектом, то есть экземпляром.
В Мире около 7 миллиардов человек, получается у нас 1 класс (тип) под названием “Человек”, и
около 7 миллиардов экземпляров или объектов класса “Человек”.
Класс – "Человек" (В общем, с его параметрами. Имя, рост, вес, цвет волос, национальность и.т.д.)
Объект - "Один конкретный экземпляр человека" (Криштиану Роналду, 186 см, 78 кг, черные
волосы, португалец)
Human.java
public class Human {
String name;
int age;
int height;
public void run(){
System.out.println(" Имя: " + name + ", возраст: " + age
+ ", рост: " + height + " выполняет пробежку ");
}
}
Main.java
public class Main {
public static void main(String[] args) {
Human h1 = new Human();
h1.age = 28;
h1.name = "Arman";
h1.height = 184;
h1.run(); // Имя: Arman, возраст: 28, рост: 184 выполняет пробежку
}
}
Конструктор
Конструктор — это метод класса, который инициализирует новый объект после его создания.
Если мы хотим дать объекту какие-то начальные параметры, то мы можем все это прописать в
конструкторе класса. Например, если брать наш пример человека, то мы знаем, что при рождении
BITLAB TEAM 60
JAVA STANDARD EDITION
ребенка, у него есть изначальный вес, начальный возраст, рост и т.д. Позже, когда уже ребенок
растет, у него меняется его вес, возраст и рост, то есть это мы можем уже изменить с помощью
методов.
Пример:
Human.java
public class Human {
String name;
int age;
int height;
double weight;
// Конструктор по умолчанию
public Human(){
this.age = 0;
this.height = 0;
this.weight = 3.5;
this.name = " No Name ";
}
// Конструктор с параметрами
public Human(int age, int height, double weight, String name){
this.age = age;
this.height = height;
this.weight = weight;
this.name = name;
}
Main.java
public class Main {
BITLAB TEAM 61
JAVA STANDARD EDITION
this используется внутри любого метода для ссылки на текущий объект. То есть this всегда служит
ссылкой на объект, для которого был вызван метод. Тем самым я указываю что поля age, height,
weight, name являются полями именно текущего класса.
Методы в классах.
Класс может содержать методы - один, два, три и больше в зависимости от сложности класса.
Методы в классе используются в качестве функции, или действия. Например, в нашем примере
человека, методом может быть его какие-то функциональные действия: есть, спать, ходить,
говорить и.т.д.
Пример:
Human.java
public class Human {
String name;
int age;
int height;
double weight;
// Конструктор по умолчанию
public Human(){
this.age = 0;
this.height = 0;
this.weight = 3.5;
this.name = " No Name ";
}
// Конструктор с параметрами
public Human(int age, int height, double weight, String name){
this.age = age;
this.height = age;
this.weight = weight;
this.name = name;
}
public void run(){
System.out.println("Имя: " +name+ ", возраст:" +age+ ", вес:" +weight
+ ", рост: " + height + " выполняет пробежку ");
}
public String getUserData(){
return "Имя: "+name+",возраст:"+age+", вес:"+weight+", рост: "+height;
}
}
BITLAB TEAM 62
JAVA STANDARD EDITION
Main.java
public class Main {
System.out.println(h1.getUserData());
Human h2 = new Human(28,186,88,"Arman");
h2.run();
// Имя: Arman, возраст:28, вес:88, рост:186 выполняет пробежку
System.out.println(h2.getUserData());
}
}
В данном примере у нас вызываются два метода, run() - который просто выводит данные
объекта и заставляет его бежать и getUserData() - который возвращает данные объекта. А выводим
мы его с помощью System.out.println(h1.getUserData());
BITLAB TEAM 63
JAVA STANDARD EDITION
+ Student()
+ Student(int id, String name, String surname, double gpa)
Создайте массив из класса Student, заполните массив 5 объектами класса Student которые мы
создали до этого, и используя цикл, выведите данные по каждому студенту.
Задание 2:
Задание 3:
Создайте мини программу, с меню панелью отображенным ниже.
BITLAB TEAM 64
JAVA STANDARD EDITION
Задание 4:
+ int number;
+ String name;
+ String surname;
+ String position;
+ Player()
+ Player(int number, String name, String surname, String position)
+ String toString() // Данный метод возвращает данные по каждому игроку, то есть все поля в один
ряд.
+ String name;
+ String country;
+ int ratingPoints;
+ Player []players;
+ Club()
+ Club(String name, String country, int ratingPoints, Player []players)
+ void printClubData(); // Данный метод выводит данные о клубе, включая список всех игроков,
которые присутствуют в массиве.
В главном классе Main, создайте 2 массива из разных игроков. (В каждом из них по 5 игроков).
Далее, создайте два клуба и присвойте к ним массивы из игроков. Далее, создайте массив из
клубов, и добавьте туда те 2 наших клуба. В конце, при помощи цикла, выведите данные каждого
клуба.
BITLAB TEAM 65
JAVA STANDARD EDITION
Задание 5:
Создайте в главном классе Main 5 объектов класса Club, в каждом клубе должен быть по 7
игроков. Создайте массив из класса Club. Назовите массив – league. Отсортируйте всех игроков в
каждом клубе, используя метод sortPlayers, и отсортируйте массив league, используя метод
sortClub.
Практические задачи
Задание 1:
+ String name;
+ String model;
+ int speed;
+ int weight;
+ Car()
+ Car(String name, String model, int speed, int weight)
BITLAB TEAM 66
JAVA STANDARD EDITION
Задание 2:
+ String name;
+ int cylinderAmount;
+ double cylinderVolume;
+ int weight;
Класс Car
+ String name;
+ String model;
+ int speed;
+ int weight;
+ Engine engine;
+ Car()
+ Car(String name, String model, int speed, int weight, Engine engine)
+ int totalWeight(); //Данный метод возвращает общий вес машины вместе с двигателем.
В классе Main, вы должны создать 3 объекта разных двигателей, 6 объектов разных машин с
разными параметрами, используя созданные нами объекты двигателей.
Добавьте все машины в массив, и выведите общий вес всех машин при помощи метода
totalWeight() и цикла.
BITLAB TEAM 67
JAVA STANDARD EDITION
Задание 3:
+ int cashMemory;
+ int price;
+ int weight;
+ CPU()
+ CPU(int cashMemory, int price, int weight)
+ int memory;
+ int price;
+ int weight;
+ HDD()
+ HDD(int memory, int price, int weight)
+ String name;
+ int price;
+ int weight;
+ HDD hardDiskDrive;
+ CPU[] cpuMemory;
+ int getTotalPrice()
+ int getTotalCPUMemory()
+ int getTotalWeight()
getTotalPrice() - возвращает общую сумму компьютера, включая сумму всех процессоров и хард
диска.
getTotalCPUMemory() - возвращает сумму памяти кэша в массиве CPU.
getTotalWeight() - Возвращает общую сумму веса компьютера, включая CPU и HDD.
Создайте в главном классе Main 2 объекта CPU, с разными параметрами. Затем создайте 2
объекта класса HDD. Создайте 6 объектов Laptop, чтобы в первых двух было по 2 CPU, у вторых два
по 4, у третьих два по 8 CPU. В Каждом лаптопе должно быть по одному HDD. Добавьте все
объекты в массив и выведите общий вес, цену и память процессоров используя методы
getTotalPrice(), getTotalCPUMemory() и getTotalWeight().
BITLAB TEAM 68
JAVA STANDARD EDITION
public Animal(){
this.weight = 0;
this.name = "No Name";
}
В данном примере мы видим, что класс извне не может иметь прямой доступ к параметрам
weight и name, но чтобы иметь к ним доступ мы используем методы getWeight() и setWeight().
Модификаторы доступа позволяют ограничить нежелательный доступ к членам класса извне.
BITLAB TEAM 69
JAVA STANDARD EDITION
Ключевое слово «private» дает самую слабую видимость — только внутри описания/методов
самого класса.
BITLAB TEAM 70
JAVA STANDARD EDITION
Задание 1
- int id;
- String login;
- String password;
- String role;
+ User()
+ User(int id, String login, String password, String role)
+ String toString() // Данный метод возвращает все данные пользователя. Но, для возврата,
используйте геттеры и сеттеры а не поля.
В основном классе создайте несколько объектов класса Users и добавьте их в массив. Далее,
используя цикл, выведите логин каждого пользователя.
Задание 2
INSERT LOGIN:
Вводите логин
INSERT PASSWORD:
Вводите пароль
При верном раскладе, программа должна вас запустить
Welcome ilyas
PRESS [1] TO EDIT LOGIN
Insert login
PRESS [2] TO CHANGE PASSWORD
Insert old password
Insert new password
Re-Insert new password
PRESS [3] TO DELETE OWN ACCOUNT
PRESS [0] TO EXIT
BITLAB TEAM 71
JAVA STANDARD EDITION
Задание 3
- String name;
- String author;
- int isbn;
- int price;
Book()
Book(String name, String author, int isbn, int price)
- String name;
- String city;
- Book[] books = new Book[100];
Library()
Library(String name, String city)
+ int size()
+ int priceSum()
Создайте метод getBook(int index), который возвращает объект книги под индексом index.
Создайте метод addBook(Book book) который добавляет книгу в массив. (Создайте специальное
приватное поле int sizeOfBooks = 0, которая увеличивается при добавлении книги)
Создайте два объекта класса Library. Используя метод addBook(Book book) добавьте 4 первых
книг в первый объект библиотеки, остальные 6 книг во второй объект библиотеки. Выведите
общую сумму книг, и цены каждой книги и общую цену всех книг по каждой библиотеке.
BITLAB TEAM 72
JAVA STANDARD EDITION
Практические задачи
Задание 1
- int id;
- String name;
- String surname;
- String department;
- int salary;
+ Worker()
+ Worker(int id, String name, String surname, String department, int salary)
+ String toString() // Данный метод возвращает все данные рабочего. Но, для возврата,
используйте геттеры и сеттеры а не поля.
- String name;
- String country;
- Worker []workers = new Worker[100]; // Для данного поля геттер и сеттер запрещен
- int sizeOfWorkers; // Для данного поля геттер и сеттер запрещен, он работает как счетчик.
Конструкторы:
+ BankApplication()
+ BankApplication(String name, String country)
Методы:
Данный метод добавляет в массив нового рабочего. (Заметьте, я не передаю поле индекса в
аргументы, вместо этого я автоматом беру значение поля sizeOfWorkers)
void listWorkers() // Данный метод выводит на экран весь список рабочих по порядку массива.
BITLAB TEAM 73
JAVA STANDARD EDITION
Используя один объект класса BankApplication, и используя его методы, создайте такое
приложение с меню:
BITLAB TEAM 74
JAVA STANDARD EDITION
Наследование, полиморфизм.
Animal.java
public class Animal {
String name;
int weight;
public Animal(){
this.name = "No Name";
this.weight = 0;
}
public Animal(String name, int weight){
this.name = name;
this.weight = weight;
}
public void run(){
Создаем класс Dog который наследует от класса Animal. Чтобы наследовать класс, достаточно
вставить имя наследуемого класса с использованием ключевого слова extends.
BITLAB TEAM 75
JAVA STANDARD EDITION
Dog.java
public class Dog extends Animal {
String sound;
public Dog(){
super();
this.sound = "No sound";
}
public Dog(String name, int weight, String sound){
super(name, weight);
this.sound = sound;
}
Используя слово extends мы расширяем класс Animal, тем самым нам не приходиться заново
объявлять параметры name, weight. Они как бы по умолчанию уже есть.
int nails;
public Cat(){
super();
this.nails = 0;
}
public Cat(String name, int weight, int nails){
super(name, weight);
this.nails = nails;
}
public void run(){
System.out.println(" Cat " + name + ", " + weight + " kg " +
" with " + nails + " nails is running ");
}
}
BITLAB TEAM 76
JAVA STANDARD EDITION
Main.java
public class Main {
public static void main(String args[]){
Animal a1 = new Animal("Some animal", 12);
Dog d1 = new Dog("Spike", 10, "Bow Bow");
Cat c1 = new Cat("Garfield", 3, 20);
a1.run();
d1.run();
c1.run();
}
}
В данном примере мы создаем по одному объекту Animal, Cat, Dog и вызываем метод run().Как
вы заметили, подклассы Cat и Dog расширяют супер класс Animal. (Присваивают параметры и
методы.)
Полиморфизмом называется возможность работать с несколькими типами так, как будто это
один и тот же тип и в то же время поведение каждого типа будет уникальным в зависимости от его
реализации.
Давайте попробуем создать несколько объектов разных классов, и поместить их в общий массив
класса Animal.
Main.java
public class Main {
public static void main(String args[]){
for(int i=0;i<animals.length;i++){
animals[i].run();
}
}
}
BITLAB TEAM 77
JAVA STANDARD EDITION
В данном примере для каждого объекта метод run() действует по разному, в зависимости от
реализации.
В Java существует ключевое слово super, которое обозначает суперкласс, т.е. класс,
производным от которого является текущий класс. В конструкторе Dog и Cat мы дублировали поля
name и weight, которые уже есть в классе Animal. Это не слишком эффективно. Соответственно,
вызвав ключевое слово super, мы вызываем действия конструктора класса Animal, и дополняем ее
уже в конструкторах класса Cat и Dog. Ключевое слово super можно использовать для вызова
конструктора суперкласса и для обращения к члену суперкласса, скрытому членом подкласса.
Вызов метода super() всегда должен быть первым оператором, выполняемым внутри конструктора
подкласса. При вызове метода super() с нужными аргументами, мы фактически вызываем
конструктор Animal, который инициализирует переменные name и weight, используя переданные
ему значения соответствующих параметров. Далее, мы дополняем то что нам нужно. У суперкласса
могут быть несколько перегруженных версий конструкторов, поэтому можно вызывать метод
super() с разными параметрами. Программа выполнит тот конструктор, который соответствует
указанным аргументам.
BITLAB TEAM 78
JAVA STANDARD EDITION
Задание 1
protected int id
protected String login
protected String password
protected String name
protected String surname
+ User()
+ User(int id, String login, String password, String role)
Геттеры и сеттеры
1 – Staff
+double salary
+String subjects[]
Геттеры и сеттеры
Переопределите метод getData(), относительно их параметрам
2 – Student
+double gpa
+String coruses[]
Геттеры и сеттеры
Переопределите метод getData(), относительно их параметрам
В вашем основном классе Main, вы должны создать как минимум по 5 объектов класса Student,
Staff и Users, и добавить их в массив из класса Users.
BITLAB TEAM 79
JAVA STANDARD EDITION
Задание 2
Создайте меню для первого задания, где вы управляете студентами, рабочими и пользователями.
(Подсказка: Фильтр вывода студента или рабочего нужно реализовать с помощью ключевого
слова: instanceof)
instanceof - специальное ключевое слово, которая возвращает true, если объект является типом
данного класса.
Например:
В данном примере, объект d является экземпляром класса Dog, соответственно возвращает true.
BITLAB TEAM 80
JAVA STANDARD EDITION
Практические задачи
Задание 1
Геттеры и сеттеры
+ ScientificBook()
+ ScientificBook(String name, String code, int pages, int price, String publicsher)
Геттеры и сеттеры
+ LiteratureBook()
+ LiteratureBook(String name, String code, int pages, String author, int publishedYear)
Геттеры и сеттеры
Переопределите метод getBookData()
BITLAB TEAM 81
JAVA STANDARD EDITION
Геттеры и сеттеры
+ void addBook(Book b) // данный метод добавляет книгу в массив используя курсор sizeOfBooks
In main class:
Задание 2
BITLAB TEAM 82
JAVA STANDARD EDITION
Абстрактные классы
Бывают моменты, когда нужно определить класс, в котором задана структура какой-либо
абстракции, но реализация всех методов отсутствует. В таких случаях мы можем с помощью
модификатора abstract объявить, что некоторые из методов обязательно должны быть
реализованы в подклассах. Класс, содержащий абстрактные методы, называется абстрактным
классом. Такие классы помечаются ключевым словом abstract.
Shape.java
public abstract class Shape{
}
}
Мы создаем абстрактный класс Shape (Фигура) в котором есть два метода printArea() и
printPerimeter() и два абстрактных метода getArea() и getPerimeter(), которые возвращают
значения площади и периметра фигур. Но загвоздка в том, что мы не знаем, что это за фигура, круг,
квадрат или треугольник, ибо для каждого из них вычисление периметра и площади по-разному.
Соответственно, мы и создали абстрактный класс Shape (Фигура), в котором есть абстрактные
методы.
Далее мы создаем класс Circle (Круг), который наследует от класса Shape, где мы уже конкретно
можем реализовать два абстрактных метода суперкласса Shape.
BITLAB TEAM 83
JAVA STANDARD EDITION
Circle.java
public class Circle extends Shape{
double radius;
public Circle(){
this.radius = 0;
}
public Circle(double radius){
this.radius = radius;
}
public double getArea(){
return 3.14*radius*radius;
}
public double getPerimeter(){
return 2*3.14*radius;
}
}
Тут мы видим конкретно что у круга площадь измеряется с помощью радиуса и числа Пи (мы
его обозначим дробным числом 3.14).
Далее мы создаем еще один класс Square (Квадрат), который тоже наследует от класса Shape,
и который тоже реализовывает абстрактные методы суперкласса Shape.
public class Square extends Shape{
double width;
public Square(){
this.width = width;
}
public Square(double width){
this.width = width;
}
public double getArea(){
return width*width;
}
public double getPerimeter(){
return 4*width;
}
*** Примечание: Подклассы всегда должны реализовать абстрактные методы суперклассов
или сами должны быть объявлены абстрактными.
BITLAB TEAM 84
JAVA STANDARD EDITION
figures[0] = c;
figures[1] = s1;
figures[2] = s2;
Одним словом, абстракция - это когда мы создаем что-то неконкретное (В данном примере это
Shape - Фигура, у которой есть площадь и периметр), но позже, наследуя от них, мы реализовываем
их абстрактные методы (конкретизируем), и применяем. В нашем примере есть два метода
printArea() и printPerimeter(), которые выводят в консоль значение их периметров и площади. Но,
так как реализация для каждого из конкретного класса (Конкретной фигуры) по-разному, мы их
оставляем на будущее, то есть для подклассов, тем самым объявляя их абстрактными.
BITLAB TEAM 85
JAVA STANDARD EDITION
- double engineVolume;
- int cylinderAmount;
- double engineWeight;
+ double getMaxSpeed(){
return (throttleEnergy()-breakEnergy())*efficiency();
}
Efficiency: 0.25
Throttle energy: engineVolume*cylinderAmount*100
Break energy: engineWeight*2
Создайте класс RenaultEnigine которая наследует от класса Engine.
- double extraTurboEnergy;
Практические задачи
Задание 1
- int id;
- String login;
- String password;
- String name;
- String surname;
- String group;
- double gpa;
- String nickName;
- String status; //// например: Professor, Lecturer, Tutor, Assistant.
- String subjects[] = new String[10]; //// Предметы которые он ведет, максимум 10
- int sizeOfSubjects = 0;
BITLAB TEAM 87
JAVA STANDARD EDITION
void printUser(int index); //// метод выводит на экран одного пользователя, но если пользователь
по данному индексу не существует, то выводит сообщение: "No user in this index"
В главном классе Main, создайте один объект класса ERPSystem, где вы управляете
пользователями.
BITLAB TEAM 88
JAVA STANDARD EDITION
Интерфейсы
Пример:
Graphics.java
public interface Graphics{
Shape.java
public interface Shape{
Мы создаем два интерфейса Shape (Фигура) и Graphics (Графика), чтобы в которых есть методы
getArea(), getPerimeter() и draw() соответственно. Интерфейс Graphics отвечает за рисование какой-
либо фигуры, а интерфейс Shape за саму фигуру и ее параметры.
Давайте теперь создадим конкретный класс, конкретную фигуру Circle которая реализует сразу
два интерфейса Shape и Graphics. В реализации данного класса мы должны будем реализовать все
абстрактные методы наследуемых интерфейсов. Если нам надо применить в классе несколько
интерфейсов, то они все перечисляются через запятую после слова implements.
BITLAB TEAM 89
JAVA STANDARD EDITION
Circle.java
double radius;
public Circle(){
this.radius = 0;
this.radius = radius;
return 3.14*radius*radius;
}
public double getPerimeter(){
return 2*3.14*radius;
Main.java
c.draw();
BITLAB TEAM 90
JAVA STANDARD EDITION
Задание 1
- String name;
- String surname;
Users[] getAllUsers();
Users[] getUsersByName(String name);
Users[] getUsersBySurname(String surname);
- Users[] users;
BITLAB TEAM 91
JAVA STANDARD EDITION
Графика (GUI).
MainFrame.java
import javax.swing.*;
import java.awt.*;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("BITLAB Application");
setSize(500,500);
}
}
Main.java
public class Main{
public static void main(String[] args) {
MainFrame frame = new MainFrame();
frame.setVisible(true);
}
}
В данном примере мы создаем простое окно, где наш класс MainFrame наследует от класса
JFrame.
BITLAB TEAM 92
JAVA STANDARD EDITION
Метод setSize(500, 500) - нужен нам для настройки размера (ширина и высота) в пикселях.
Окно мы создаем при помощи наследования нашего класса от класса JFrame. Далее, мы
задаем размер нашей окошки, и размещаем туда наши элементы. При помощи метода
setLayout(null), мы даем нашим элементам свободно переставляться по площади нашей окошки.
BITLAB TEAM 93
JAVA STANDARD EDITION
MainFrame.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public MainFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("BITLAB Application");
setSize(500,500);
setLayout(null);
});
add(button);
}
}
BITLAB TEAM 94
JAVA STANDARD EDITION
Наше графическое окно. Пример того, как можно брать значение текстового поля, и
задавать это значение в другой элемент как метка. Действие кнопки происходит при
добавлении слушателя.
BITLAB TEAM 95
JAVA STANDARD EDITION
Задание 1.
BITLAB TEAM 96
JAVA STANDARD EDITION
Самый простой пример - мы создаем объект класса Scanner для считывания целостных чисел с
консоли. И при запуске программы мы вместо целостного числа вводим какой-либо текст. Так как
программа ожидает число, у нас возникает нештатная ситуация. Ошибка, которая возникает при
запуске, а не при компиляции. Можно вручную отслеживать возникновение подобных ошибок, а
можно воспользоваться специальным механизмом исключений, который упрощает создание
больших надёжных программ, уменьшает объём необходимого кода и повышает уверенность в
том, что в приложении не будет необработанной ошибки.
Пример:
import java.util.Scanner;
public class Main {
public static void main(String args[]){
}
}
Если мы с консоли введем вместо цифры int какой-либо текст, то у нас программа выбросит
ошибку. И далее программа не будет выполняться.
BITLAB TEAM 97
JAVA STANDARD EDITION
Пример:
import java.util.Scanner;
public class Main {
try{
num = in.nextInt();
}catch(Exception e){
num = 0;
e.printStackTrace();
System.out.println(num*num);
System.out.println("Program finished");
}
}
Во втором примере, при запуске программы, даже если мы введем какой-либо текст, то все
равно программа выполниться до конца, так как блок try отлавливает исключение или ошибку,
затем сразу же выполняется блок catch. То есть, при введении текста вместо цифры, в итоге наша
переменная num будет равна 0. В конце концов программа дойдет до своего конца.
Исключение может появиться благодаря самой системе, либо вы сами можете создать его
вручную. Системные исключения возникают при неправильном использовании языка Java или
запрещённых приёмов доступа к системе. Ваши собственные исключения обрабатывают
специфические ошибки вашей программы.
BITLAB TEAM 98
JAVA STANDARD EDITION
В Java есть два вида исключений: которые наследуются от RuntimeException и которые нет. Те,
которые наследуются от RuntimeException их не обязательно отлавливать, это ошибки которые,
могут возникнуть в результате обычных операций в Java. Но те, которые не наследуются от
RuntimeException, их необходимо отлавливать, иначе компилятор откажется компилировать
программу.
В некоторых случаях один и тот же блок программного кода может возбуждать исключения
различных типов. Для того, чтобы обрабатывать подобные ситуации, Java позволяет использовать
любое количество catch-разделов для try-блока. Наиболее специализированные классы
исключений должны идти первыми, поскольку ни один подкласс не будет достигнут, если поставить
его после суперкласса. Следующая программа перехватывает два различных типа исключений,
причем за этими двумя специализированными обработчиками следует раздел catch общего
назначения, перехватывающий все подклассы класса Throwable.
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main {
public static void main(String args[]){
}catch(ArithmeticException e){
System.out.println("Aritmetic exception");
div = 1;
}catch(InputMismatchException e){
div = 1;
System.out.println("Input Mismatch exception");
}
System.out.println(div);
System.out.println("Program finished");
}
}
BITLAB TEAM 99
JAVA STANDARD EDITION
Оператор finally
Ключевое слово finally создаёт блок кода, который будет выполнен после завершения блока
try/catch, но перед кодом, следующим за ним. Блок будет выполнен, независимо от того,
передано исключение или нет. Оператор finally не обязателен, однако каждый оператор try
требует наличия либо catch, либо finally.
Main.java
import java.util.Scanner;
import java.util.InputMismatchException;
try{
num = in.nextInt();
denom = in.nextInt();
div = num/denom;
}catch(ArithmeticException e){
System.out.println("Aritmetic exception");
div = 1;
}catch(InputMismatchException e){
div = 1;
System.out.println("Input Mismatch exception");
}finally{
System.out.println(div);
System.out.println("Program finished");
}
}
}
Задание 1.
- int id;
- String name;
- String author;
- String name;
- String city;
- int index = 0;
Добавьте геттеры и сеттеры для каждого поля кроме index и массива books.
Создайте метод addBook(Book book) который добавляет книгу в список, и увеличивает значение
index на 1.
Создайте метод printBooks(); //// данный метод списком выводит данные по всем книгам
В ходе разработки и запуска, есть вероятность что человек может добавить в список не
инициализированный объект класса Book (т.е. Book b = null), что приводит выбросу исключения
NullPointerException, если мы хотим вывести его данные с помощью метода toString(). Ваша задача
состоит в том, чтобы метод printBooks() самостоятельно отлавливала эту ошибку и вместо выброса
из цикла программы, метод должен просто вывести сообщение : "The book is empty".
При добавлении книги в список книг при помощи метода addBook(Book book), вы должны
отлавливать ошибку ArrayIndexOutOfBoundsException, которая выбрасывается при превышении
размера массива. и вместо исключения, мы должны вывести на экран "The library is full".
Практические задачи
Задание 1.
- int id;
- String name;
- String author;
- String name;
- String city;
- int index = 0;
Добавьте геттеры и сеттеры для каждого поля кроме index и массива books.
Создайте метод addBook(Book book) который добавляет книгу в список, и увеличивает значение
index на 1.
Создайте метод printBooks(); //// данный метод списком выводит данные по всем книгам
В ходе разработки и запуска, есть вероятность что человек может добавить в список не
инициализированный объект класса Book (т.е. Book b = null), что приводит выбросу исключения
NullPointerException, если мы хотим вывести его данные с помощью метода toString(). Ваша задача
состоит в том, чтобы метод printBooks() самостоятельно отлавливала эту ошибку и вместо выброса
из цикла программы, метод должен просто вывести сообщение : "The book is empty".
При добавлении книги в список книг при помощи метода addBook(Book book), вы должны
отлавливать ошибку ArrayIndexOutOfBoundsException, которая выбрасывается при превышении
размера массива. и вместо исключения, мы должны вывести на экран "The library is full".
Задание 2.
- name
- surname
- login
- password
Геттеры и сеттеры
+ User [] getUsersList()
Как список можете сами вручную возвращать массив из трех или четырех объектов класса User
+ static Connection getConnection(String url, String dbName, String userName, String password);
В основном классе Main.java попробуйте создать объект класса Connection методом getConnection
и вывести список при помощи метода getUsersList.
Для хранения большого количества однотипных данных могут использоваться массивы, но они
не всегда являются идеальным решением.
Пример:
import java.util.ArrayList;
for(int i=0;i<list.size();i++){
System.out.println(" Element in (" + i + ") = " + list.get(i));
}
System.out.println(list.toString());
В данном примере, мы создаем объект класса ArrayList под названием list, у которого тип
Integer. Мы собираемся туда хранить целостные числа, но обратите внимание, мы не использовали
примитивные типы данных int, так как int не является классом, соответственно, мы всегда будем
указывать классы вместо примитивных типов данных. (Dobule, Boolean, Integer, Long и.т.д.)
Метод add(obj) используется для добавления нового элемента в список. Изначально, размер
нашего списка равна 0, затем при каждом добавлении элемента мы можем ее расширять. Метод
size() возвращает текущий размер списка. Метод get(int) возвращает значение элемента в заданном
индексе.
void add(int index, E obj): добавляет в список по индексу index объект obj
void sort(Comparator<? super E> comp): сортирует список с помощью компаратора comp
int indexOf(Object obj): возвращает индекс первого вхождения объекта obj в список. Если
объект не найден, то возвращается -1
int lastIndexOf(Object obj): возвращает индекс последнего вхождения объекта obj в список. Если
объект не найден, то возвращается -1
E remove(int index): удаляет объект из списка по индексу index, возвращая при этом удаленный
объект
E set(int index, E obj): присваивает значение объекта obj элементу, который находится по
индексу index
Задание 1
- int id;
- String name;
- String surname;
- double balance;
Геттеры и сеттеры
+ String toString(); //// Данный метод все значения полей
- String name;
- ArrayList<Account> accounts;
В основном классе Main, создайте 3 объекта BankApplication, добавьте туда по 10 новых счетов, с
разным балансом.
Добавьте все эти банки в массив из банков ArrayList<BankApplication> allBanks;
Выведите данные по каждому банку, отсортировав их по среднему значению баланса, по
убыванию.
В Java есть два метода чтения и записи файлов: бинарный (минимальная единица записи - байт)
и строковый (минимальная единица записи - символ).
В Java есть классы Reader/Writer - основа строковой записи. Reader - считывает данные, Writer
записывает данные. От этих классов наследуются классы FileReader, FileWriter - классы, которые
считывают и записывают в файлы.
Но чтение и запись через эти классы не сильна удобна, для этого существует классы,
преобразовывающие поток данных в удобное представление BufferedReader и BufferedWriter.
В итоге, чтобы создать объект для чтения с файла, у нас получается следующий код:
BufferedReader reader = new BufferedReader(new FileReader("text.txt"));
BufferedReader(Reader in)
Где Reader in это поток ввода. Во втором конструкторе, кроме потока ввода, из которого
производится чтение, можно определить размер буфера, в который будут считываться символы.
import java.io.*;
int symbol;
while((symbol=br.read())!=-1){
System.out.println((char)symbol);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
try{
BufferedReader br =
new BufferedReader (new FileReader("file.txt"));
String s;
while((s=br.readLine())!=null){
System.out.println(s);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
try{
BufferedWriter writer =
new BufferedWriter(new FileWriter("file.txt")))
}catch(IOException ex){
e.printStackTrace();
}
}
}
Задание 1
- int id;
- String login;
- String password;
Геттеры и сеттеры
Практические задачи
Задание 1
Геттеры и сеттеры
Перегрузите метод String toString(), которая возвращает все поля объекта
BITLAB TEAM 112
JAVA STANDARD EDITION
- String goodName;
- int goodPrice;
- Date buyTime; // java.util.Date;
Поле buyTime является типом java.util.Date, в котором я могу хранить время покупки. Для
получения данного времени системы, нужно просто создать новый объект new Date(), в котором
по умолчанию устанавливается время системы.
Метод saveUsersList сохраняет динамический массив истории покупок в наш файл history.txt
Список методов:
addGoodItem(GoodItem g);
deleteGoodItem(int index);
addHistory(GoodItem g);
Сериализация, десериализация
Сериализация - объекта это технология сохранения полной копии его объекта на которую он
ссылается, при использовании потока ввода и вывода. Например, у нас есть какой-то список
динамического массива ArrayList или какой-то объект, и мне нужно сохранить его состояние, и в
будущем обратно вернуть и использовать его обратно.
Users.java
import java.io.Serializable;
public User(){
this.name = "No Number";
this.number = 0;
}
Main.java
import java.io.*;
import java.util.*;
try{
ObjectOutputStream outStream =
new ObjectOutputStream(new FileOutputStream("bitlab.dat"));
outStream.writeObject(usersList);
outStream.close();
}catch (Exception e) {
e.printStackTrace();
}
С начала создается класс, который является сериализуемым, так как реализует интерфейс
Serializable.
MainRead.java
import java.io.*;
import java.util.*;
try{
ObjectInputStream inStream =
new ObjectInputStream(new FileInputStream("bitlab.dat"));
usersList = (ArrayList<User>)inStream.readObject();
inStream.close();
}catch (Exception e) {
e.printStackTrace();
}
for(User u : usersList){
System.out.println(u.getName() + " - " + u.getNumber());
}
}
В данной программе, мы точно таким же образом ссылаемся на наш bitlab.dat файл, и
десериализируем его с помощью класса ObjectInputStream. В этом классе есть метод readObject()
который возвращает объектное значение. Для этого на придется применить метод "кастинга", то
есть преобразования из одного типа в другой, где мы превращаем объект в ArrayList.
Задание 1
- String name;
- int credits;
Геттеры и сеттеры
- String name;
- String surname;
- List<Subject> subjects = new ArrayList<Students>();
Геттеры и сеттеры
Name:
Surname:
Name:
Credits:
Практические задачи
Задание 1
- String nickName;
- double rating;
Геттеры и сеттеры
- String gameName;
- String ipAddress;
- int port;
- List <Players> players = new ArrayList<Players>();
Геттеры и сеттеры
В главном классе создайте метод void createGame(), который создает новую игру.
Метод void addPlayers(Player player) должен добавить игроков в игру.
После запуска каждого метода, мы должны сохранять состояние класса в определенный файл
settings.data
В реальной жизни по сути мы живем в потоке. Если брать каждого человека за поток, то у нас в
Мире около 7 миллиардов потоков, которые независимо друг от друга могут ходить, дышать, есть,
спать, бегать или программировать.
ThreadSample.java
public class ThreadSample extends Thread{
String name;
for(int i=0;i<5;i++){
System.out.println("Thread "+ name + " : " + i);
Thread.sleep(500);
}
}catch(Exception e){
e.printStackTrace();
}
}
Далее, замещаем метод run() в котором прописываем цикл с задержкой 500 миллисекунд. После
завершения цикла, мы выходим из метода run() тем самым завершая работу одного потока.
Main.java
public class Main{
ts1.start();
ts2.start();
ts3.start();
ThreadRunnable.java
public class ThreadRunnable implements Runnable{
String name;
for(int i=0;i<5;i++){
System.out.println("Thread "+ name + " : " + i);
Thread.sleep(500);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
Main.java
public class Main{
t1.start();
t2.start();
t3.start();
У нас есть состояние потока, когда он "спит". Это состояние мы получаем, когда вызываем
метод sleep(int), куда в аргументы мы передаем значение времени в миллисекундах.
Выход из программы или остановка потока происходит, когда потоки закончат свою работу. Но
потоки можно приостановить досрочно, с помощью метода interrupt();
Задание 1
- String operationName;
- int operationTime; //время операции в секундах
То есть, ежесекундно мы выводим состояние операции на экран, тем самым показывая сколько
времени у нас уходит на одно действие.
В итоге, в главном классе создайте 10 объектов операции и назначьте для них разное время.
Запустите их одновременно.
Задание 2
Создайте графическое окно в котором содержится кнопка "FIRE" и метка (JLabel) со значением #.
При нажатии на кнопку "FIRE" наша метка должна переместиться с одного места на другое
плавным образом.
*** Подсказка:
При нажатии мы просто запускаем цикл, где например каждые 100 миллисекунд меняем локацию
- setLocation(x,y) нашей метки
Практические задачи
Задание 1
- String name;
- int speed;
- double distance;
Переопределите метод void run()в котором мы пишем дистанцию, которую проехала машина за
каждую секунду.
Например:
Машина остановиться после того как проедет определенную дистанцию, которую мы задаем в
основном классе. Данная дистанция будет финишем, и вы ее зададите в виде статического
целостного числа.
….
Задание 2
Нарисуйте графический интерфейс для нашего приложения, где мы имеем три кнопки JButton и
одну метку JLabel.
В Java вы создаете сокет, чтобы создать соединение с другой машиной, затем вы получаете
InputStream и OutputStream из сокета по которым вы и начинаете передавать данные, как объект
потока ввода/вывода. Существует 2 класса сокетов:
1. ServerSocket
2. Socket
ObjectOutputStream outStream =
new ObjectOutputStream(socket.getOutputStream());
while(true){
outStream.writeObject(in.next());
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
import java.net.*;
import java.io.*;
import java.util.*;
try{
System.out.println("Client connected");
ObjectInputStream inStream =
new ObjectInputStream(socket.getInputStream());
while((message = (String)inStream.readObject())!=null){
System.out.println(message);
}catch (Exception e) {
e.printStackTrace();
}
}
В данном примере клиент подключается к серверу через класс Socket. У сервера есть свой IP-
Адрес. На данный момент, она равняется 127.0.0.1, то есть локальный адрес нашего компьютера.
Порт у сервера – 1989. После того как клиент подключается к серверу, мы создаем потоки
ObjectInputStream и ObjectOutputStream для сервера и клиента соответственно. Далее идет
классическое отправление данных через потоки, с помощью метода writeObject() и считывание
через метод readObject().
ClientHandler.java
import java.net.*;
import java.io.*;
import java.util.*;
this.socket = socket;
try{
ObjectInputStream inStream =
new ObjectInputStream(socket.getInputStream());
while((message = (String)inStream.readObject())!=null){
System.out.println(message);
}catch (Exception e) {
e.printStackTrace();
Теперь наш сервер будет способен обрабатывать несколько подключении, передав всю работу
специальному поточному классу ClientHandler.
import java.net.*;
import java.io.*;
import java.util.*;
try{
while(true){
clientHandler.start();
}catch(Exception e) {
e.printStackTrace();
}
Клиентовская сторона останется точно таким же, так как она не требует несколько обработок
подряд. В целом, на ваше усмотрение можно создавать мини приложения для чата, используя
библиотеку графического интерфейса Swing.