В данной лабораторной работе мы установим необходимое программное обеспечение и познакомимся с базовым синтаксисом и операторами языка Java.
Для работы с Java, вам нужно установить JDK и среду разработки.
Java Development Kit (сокращенно JDK) — бесплатно распространяемый компанией Oracle Corporation (ранее Sun Microsystems) комплект разработчика приложений на языке Java, включающий в себя компилятор Java (javac), стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE).
Для установки JDK необходимо скачать установщик по следующей ссылке (также вы можете загуглить "download jdk" и перейти по первой ссылке).
Установка JDK, как правило, проходит без проблем, настраивать параметры установки не требуется.
Интегрированная среда разработки (Integrated development environment — IDE) — комплекс программных средств, используемый программистами для разработки программного обеспечения.
Для Java существует "большая тройка" сред разработки:
Все остальные среды являются более простыми и менее функциональными.
В рамках данного курса будет использоваться среда IntelliJ IDEA, которая считается самой популярной IDE для Java. Вы можете выполнять лабораторные работы любым удобным вам способом, в любой удобной вам среде разработки.
В рамках данного курса будет использована Community версия среды IntelliJ IDEA. Скачиваем и запускаем с сайта разработчика установщик.
В процессе установки желательно выбрать следующие параметры установки
Кроме установки среды разработки, нам необходимо добавить дополнительные плагины - EduTools и CheckStyle.
Запустим IntelliJ IDEA, после чего выберем пункт Configure -> Plugins.
Найдите в поисковой строке EduTools и установим его.
После этого введем в поисковой строке CheckStyle и также установим его. После этого необходимо перезапустить среду разработки.
При первом запуске вас попросят выбрать цветовую схему среды разработки. Остальные параметры можете опустить. В стартовом окне выбираем пункт "Create New Project".
В следующем окне обратите внимание, что вас просят выбрать JDK, который будет использован в вашем проекте.
Нажмите кнопку "New..." и укажите путь к установленному ранее JDK (как правило, это C:\Program Files\Java\xxxx
)
В следующем окне выбираем пункт "Create project from template" и выбираем "Command Line App"
Далее нам необходимо указать название проекта, а также Base Package проекта. Далее мы разберемся, что означает термин package, а пока можете указать его в формате [группа].[фамилия]
После завершения мастера нового проекта, IDEA сгенерирует новый пустой проект. Сразу запустим проект. Для этого можно выбрать пункт Run -> Run "Main", нажать комбинацию клавиш Shift+F10
либо нажать на зеленый треугольник справа в верхней части редактора.
При разработке языка Java был взят за основу синтаксис языков С и C++, поэтому, многие аспекты синтаксиса языка покажутся вам знакомыми.
В Java, как и в C, существуют однострочные и блоковые комментарии. Однако, кроме этого, согласно конвенции Oracle, существуют другие виды комментариев: copyright-блок вверху, doc-комментарии, TODO-комментарии, комментарии после statement`ов, комментарии для комментирования кода. Ознакомьтесь с принятыми правилами использования комментариев, на защите лабораторных они будут требоваться в обязательном порядке, согласно принятым конвенциям.
Переменные чувствительны к регистру (variable
и Variable
– две разные переменные), могут быть бесконечной длины, состоять из букв юникода и цифр юникода, символов _
и $
.
Первый символ переменной может быть буквой, символом _
или $
(использовать _
или $
первым символом КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ, они существуют для специальных ситуаций, которые нас сейчас не интересуют, так что считайте, что начинаться переменная может только с буквы юникода). Крайне не рекомендуется использовать буквы национальных алфавитов, кириллицу, транслит. Только латинские буквы, названия на английском. Также, названия переменных не должны совпадать со списком зарезервированных слов, который представлен ниже.
Кроме ключевых слов в Java существуют три литерала: null
, true
, false
, не относящиеся к ключевым и зарезервированным словам, а также зарезервированное слово var
, значение которого зависит от его позиции в коде.
Приведенный ниже блок кода даст вам общее представление о том, как надо называть переменные
В языке Java существуют примитивные типы (аналогичны типам данных в C) и ссылочные (или объектные) типы данных. На данный момент нас интересуют только примитивные типы данных.
Java – строго типизированный язык программирования. Это значит, что переменная, перед использованием, должна быть объявлена и ей должен быть присвоен тип, который нельзя поменять. Также, при выполнении операций присваивания, компилятор проверяет соответствие типов (какого-то механизма автоматического приведения типов у Java нет).
Всего существуют восемь примитивных типов данных: int, long, short, byte, double, float, char, boolean. Их очень легко запомнить:
4 типа для целых чисел («короткое short», «среднее int», «длинное long» и байт);
2 типа для чисел с плавающей запятой (старая парочка double и float);
2 «специальных» типа – символ и булевый тип.
Операторы ветвления в C и Java практически идентичны
Работа с циклами в Java мало чем отличается от языка C
Работа с массивами в Java несколько отличается от работы с массивами в C, в основном, из-за механизма выделения памяти под массивы.
Так как Java является объектно-ориентированным языком, функции здесь называются методами (на данный момент мы будем считать, что методы и функции выполняют одну и ту же роль, но методы могут находиться только внутри классов).
Скачайте архив с заданием на первую лабораторную работу.
Откройте IntelliJ IDEA (предварительно установите плагин EduTools), выберите пункт Learn and Teach -> Import Local Course
Выберите архив с заданием
Откройте задание с помощью кнопки Open
Задание на лабораторную работу состоит из 7 задач, которые необходимо решить
Для решения каждой задачи требуется написать код для метода и вернуть правильное значение. Условие работы метода описано в правой части окна. После написания кода, нажмите кнопку Check, чтобы проверить, правильно ли вы реализовали метод.
Давайте рассмотрим выполнение лабораторной работы на примере первой задачи.
Нам необходимо реализовать метод sleepIn()
. Согласно условию задачи, метод принимает на вход булеву переменную weekday
(будний ли день) и переменную vacation
(отпуск или нет).
Давайте нажмем кнопку Check и посмотрим, что произойдет.
Как мы видим, изначально задача не решена, нам необходимо корректно реализовать метод.
Согласно условию задачи, метод возвращает true
, если выходной или отпуск. Очевидно, что код метода будет выглядеть следующим образом.
Проверим правильность написания кода.
Ура, задача решена. Для успешной сдачи лабораторной работы необходимо выполнить все 7 задач.
На всякий случай, продублируем условия задач на первую лабораторную работу
Метод sleepIn() принимает решение о том, необходимо ли нам проснуться или можно еще поспать. Нужно проснуться, если будний день и нет отпуска
Параметр weekday определяет, будний ли день
Параметр vacation определяет, отпуск или нет
Метод возвращает true, если можно еще поспать и false в обратном случае
Дано два числа, метод closeToTen() возвращает число, которое наиболее близко к 10. Если оба числа равноблизки к 10, то метод возвращает 0.
Подсказка: используйте метод Math.abs() для получения абсолютного значения числа. Пример:
closeToTen(8, 13) -> 8 (число 8 ближе к 10)
closeToTen(8, 11) -> 11 (число 11 ближе к 10)
closeToTen(13, 7) -> 0 (оба числа равноблизки к 10)
Метод принимает на вход массив и возвращает массив в обратном порядке
Пример:
reverseArray([1,2,3]) -> [3,2,1]
reverseArray([7,0,0]) -> [0,0,7]
Метод принимает на вход два массива и возвращает массив, сумма элементов которого больше. Если суммы элементов массивов равны, метод возвращает первый массив.
Пример:
biggestArray([1,2,3], [1,2,4]) -> [1,2,4]
biggestArray([1,5,10], [15]) -> [1,5,10]
biggestArray([2,4,6], [10,2]) -> [2,4,6]
Метод принимает на вход число n >=0. Метод возвращает массив по шаблону {1, 1,2, 1,2,3, ...1,2,3..n}. Длина итогового массива = n*(n+1)/2
Пример:
seriesUp(3) -> [1, 1, 2, 1, 2, 3]
seriesUp(4) -> [1, 1, 2, 1, 2, 3, 1, 2, 3, 4]
seriesUp(2) -> [1, 1, 2]
Дан непустой массив. Метод возвращает true, если массив можно разбить на две части (необязательно равные) таким образом, чтобы сумма частей была равна.
Пример:
canSplit([1, 1, 1, 2, 1]) -> true ([1,1,1] [2,1])
canSplit([2, 1, 1, 2, 1]) -> false
canSplit([10, 1, 2, 3, 4]) -> true ([10] [1,2,3,4])
Дан массив, метод возвращает true если каждый элемент массива равен или больше предыдущему
Пример:
scoresIncreasing([1, 3, 4]) -> true
scoresIncreasing([1, 3, 2]) -> false
scoresIncreasing([1, 1, 4]) -> true
Реализуйте игру "Крестики-нолики". В игру играют два человека, поочередно вводя координаты поля, куда необходимо поставить крестик или нолик. Ввод происходит в формате [строка] [столбец]
. Например: 0 0
или 1 2
.
Сценарий игры будет примерно следующим
Ниже представлен возможный вариант метода для отрисовки поля. В данном случае подразумевается, что в двумерном массиве число 0
соответствует пустому полю, число 1
соответствует X
, а число - 1
соответствует 0
.
Блок-схема алгоритма программы может быть примерно следующей.
В качестве дополнительного задания необходимо предусмотреть метод для проверки корректности ввода: можно ставить крестик или нолик только в свободную ячейку, а также отслеживать выход за пределы поля при указании номера строки и столбца.
Если пользовательский ввод оказался некорректным, то программа просит игрока повторить ход.
abstract
continue
for
new
switch
assert
default
goto
package
synchronized
boolean
do
if
private
this
break
double
implements
protected
throw
byte
else
import
public
throws
case
enum
instanceof
return
transient
catch
extends
int
short
try
char
final
interface
static
void
class
finally
long
strictfp
volatile
const
float
native
super
while
record
var
yield
Type
Min
Max
RAM
Default
Объявления и литералы
byte
-128
127
8 bit
0
byte b = 100;
short
-32,768
32,767
16 bit
0
short b = 10000;
int
-2^31
-2^31-1
32 bit
0
int a = 15;
int aHex = 0xaa;
int aBin = 0b0001111;
(это же справедливо и для byte,short,long, если соблюдать диапазоны)
long
-2^63
-2^63-1
64 bit
0L
long number = 10000L;
double
4.9^-324
~1.8^308
64 bit
0.0d
double d = 6.6;
float
~1.4^-45
~3.4^38
32 bit
0.0f
float f = 5.5f;
char
0
65535
16 bit
'\u0000'
char c = ‘f’;
char c = 63;
char c = '\u2422';
boolean
false
true
1 bit
false
boolean b = true;