Курс "Объектно-ориентированное программирование"
  • Главная
  • 1 семестр (осень 2021)
    • Видео
    • Конспект лекций
      • Лекция 1
      • Лекция 2
      • Лекция 3
      • Лекция 4
      • Лекция 5
      • Лекция 6
      • Лекция 7
      • Лекция 8
      • Лекция 9
      • Лекция 10
      • Лекция 11
      • Лекция 12
      • Лекция 13
      • Лекция 14
      • Лекция 15
    • Лабораторные работы
      • Лабораторная работа 1
        • 1. Установка программного обеспечения, создание и запуск проекта
        • 2. Основы синатксиса Java
        • Задание на лабораторную работу
      • Лабораторная работа 2
        • Синтаксис создания классов
        • Задание на лабораторную работу
      • Лабораторная работа 3
        • Инкапсуляция
        • Язык моделирования UML
        • Задание на лабораторную работу
      • Лабораторная работа 4
        • Наследование и композиция
        • Наследование и композиция в UML
        • Задание на лабораторную работу
      • Лабораторная работа 5
        • Задание на лабораторную работу
      • Лабораторная работа 6
        • Абстрактные классы и интерфейсы в UML
        • Задание на лабораторную работу
  • 2 семестр (весна 2022)
    • Конспект лекций
      • Лекция 1-2
      • Лекция 3-4
      • Лекция 5
      • Лекция 6
      • Лекция 7-8
      • Лекция 9
      • Лекция 10
      • Лекция 11-12
      • Лекция 13-14
      • Лекция 15
  • Архив
    • Лекция 2
    • Архив
      • Заметки по абстракции
      • Конспект лекций
        • 1. Принцип Separation of Concerns, контроллер и представление
        • 2. Паттерн MVC
        • 3. Клиент-серверная архитектура. Создание простой RESTful веб-службы с помощью Spring Boot.
        • 4. Внедрение зависимостей (Dependency Injection)
        • 5. Интеграция приложения с СУБД
        • 6. Фреймворк Spring MVC
        • 7. Работа со Spring Security, часть 1
        • 8. Работа со Spring Security, часть 2
        • 9. Развертывание приложения в Heroku
      • Заочники (осень 2022)
      • Архив
        • Лекции
          • Draft
            • 5. Абстрактные классы и интерфейсы. Механизм обратного вызова
            • 6. Анонимные классы
          • Блок лекций 1
            • Дополнительные задания и литература
            • 1. Базовые сведения об ООП
            • 1. Обобщенные типы. Автоупаковка и автораспаковка.
            • 2. Знакомство с языком Java
          • Блок лекций 2
            • 5. Абстрактные классы и интерфейсы. Механизм обратного вызова.
            • 6. Анонимные объекты, классы, методы. Лямбда-выражения.
            • 7. Аргументы переменной длины. Принцип абстракции. Дополнительные принципы ООП.
          • Блок лекций 3
            • 2. Коллекции объектов.
            • 3. Паттерн Итератор. Компараторы. Потоки в Java (Streams API)
          • Блок лекций 4
            • 1. Исключения в Java. Обработка исключений.
          • Блок лекций 5
            • Статические поля и методы
            • Вложенные и внутренние классы
            • Перечисления
          • Блок лекций 6
            • 2. Интеграция приложения с СУБД
        • Лабораторные работы
          • 2. Основы синтаксиса
            • Python
            • C#
          • Лабораторная работа 3
            • 1. Инкапсуляция
            • 2. Перегрузка методов
            • Задание на лабораторную работу
            • Теоретические вопросы
          • Лабораторная работа 4
            • Задание на лабораторную работу
            • Теоретические вопросы
          • Лабораторная работа 6
            • Задание на лабораторную работу
            • Теоретические вопросы
          • Лабораторная работа 7
            • Задание на лабораторную работу
            • Теоретические вопросы
          • Лабораторная работа 8
          • Лабораторная работа 9
          • Лабораторная работа 10
            • Задание на лабораторную работу
          • Лабораторная работа 11
            • Задание на лабораторную работу
          • Лабораторная работа 12
            • Пример выполнения лабораторной работы
            • Задание на лабораторную работу
        • Практические работы
          • Практическая работа 1
          • Практическая работа 2
        • Материалы по Java Spring
          • 1. Клиент-серверная архитектура. Создание простой RESTful веб-службы с помощью Spring Boot.
          • 4. Работа со Spring MVC, часть 1
          • 5. Работа со Spring MVC, часть 2
      • Конспект лекций
        • 1. История развития языков программирования
        • 2. Базовые термины ООП
        • 3. Понятие класса и объекта
        • 4. Создание объектов. Конструктор.
        • 5. Основные принципы ООП. Инкапсуляция.
        • 6. Перегрузка методов
        • 7. Повторное использование кода. Композиция и наследование
        • 8. Полиморфизм
        • 9. Абстрактные классы и интерфейсы
        • 10. Анонимные классы, интерфейсы, методы. Лямбда-выражения
        • 11. Принцип абстракции. Дополнительные принципы ООП
        • 12. Обобщенные типы. Автоупаковка и автораспаковка
        • 13. Коллекции
        • 14. Паттерн "Итератор". Компараторы. Фреймворк Streams API.
        • 15. Исключения в Java. Обработка исключений
        • 16. Принципы разработки графического интерфейса. Фреймворк JavaFX
        • 17. События в JavaFX
        • 20. Перечисления
      • Лабораторные работы
        • Лабораторная работа 2
          • 1. Синтаксис создания классов
          • 2. Язык моделирования UML
          • Задание на лабораторную работу
          • Теоретические вопросы
        • Лабораторная работа 3
          • 1. Инкапсуляция
          • 2. Перегрузка методов
          • Задание на лабораторную работу
        • Лабораторная работа 4
          • Наследование и композиция
          • Наследование и композиция в диаграмме классов UML
          • Задание на лабораторную работу
        • Лабораторная работа 5
          • Задание на лабораторную работу
          • Теоретические вопросы
        • Лабораторная работа 6
          • Задание (старое)
          • Теоретические вопросы
        • Лабораторная работа 8
          • Задание на лабораторную работу
        • Лабораторная работа 9
          • Задание на лабораторную работу
      • Видеолекции
      • Видеолекции
Powered by GitBook
On this page
  • Как выполнять лабораторную работу
  • Условия задач
  • Проект - игра "Крестики-нолики"

Was this helpful?

Export as PDF
  1. 1 семестр (осень 2021)
  2. Лабораторные работы
  3. Лабораторная работа 1

Задание на лабораторную работу

Previous2. Основы синатксиса JavaNextЛабораторная работа 2

Last updated 3 years ago

Was this helpful?

Как выполнять лабораторную работу

Скачайте архив с заданием на первую лабораторную работу.

Откройте IntelliJ IDEA (предварительно установите плагин EduTools), выберите пункт Learn and Teach -> Import Local Course

Выберите архив с заданием

Откройте задание с помощью кнопки Open

Задание на лабораторную работу состоит из 7 задач, которые необходимо решить

Для решения каждой задачи требуется написать код для метода и вернуть правильное значение. Условие работы метода описано в правой части окна. После написания кода, нажмите кнопку Check, чтобы проверить, правильно ли вы реализовали метод.

Пример выполнения лабораторной работы

Давайте рассмотрим выполнение лабораторной работы на примере первой задачи.

Нам необходимо реализовать метод sleepIn(). Согласно условию задачи, метод принимает на вход булеву переменную weekday (будний ли день) и переменную vacation (отпуск или нет).

Давайте нажмем кнопку Check и посмотрим, что произойдет.

Как мы видим, изначально задача не решена, нам необходимо корректно реализовать метод.

Согласно условию задачи, метод возвращает true, если выходной или отпуск. Очевидно, что код метода будет выглядеть следующим образом.

public boolean sleepIn(boolean weekday, boolean vacation) {
    return !weekday || vacation;
}

Проверим правильность написания кода.

Ура, задача решена. Для успешной сдачи лабораторной работы необходимо выполнить все 7 задач.

Условия задач

На всякий случай, продублируем условия задач на первую лабораторную работу

1. Метод sleepIn()

Метод sleepIn() принимает решение о том, необходимо ли нам проснуться или можно еще поспать. Нужно проснуться, если будний день и нет отпуска

  • Параметр weekday определяет, будний ли день

  • Параметр vacation определяет, отпуск или нет

Метод возвращает true, если можно еще поспать и false в обратном случае

2. Метод closeToTen()

Дано два числа, метод closeToTen() возвращает число, которое наиболее близко к 10. Если оба числа равноблизки к 10, то метод возвращает 0.

Подсказка: используйте метод Math.abs() для получения абсолютного значения числа. Пример:

  • closeToTen(8, 13) -> 8 (число 8 ближе к 10)

  • closeToTen(8, 11) -> 11 (число 11 ближе к 10)

  • closeToTen(13, 7) -> 0 (оба числа равноблизки к 10)

3. Метод reverseArray()

Метод принимает на вход массив и возвращает массив в обратном порядке

Пример:

  • reverseArray([1,2,3]) -> [3,2,1]

  • reverseArray([7,0,0]) -> [0,0,7]

4. Метод biggestArray()

Метод принимает на вход два массива и возвращает массив, сумма элементов которого больше. Если суммы элементов массивов равны, метод возвращает первый массив.

Пример:

  • 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]

5. Метод seriesUp()

Метод принимает на вход число 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]

6. Метод canSplit()

Дан непустой массив. Метод возвращает 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])

7. Метод scoresIncreasing()

Дан массив, метод возвращает true если каждый элемент массива равен или больше предыдущему

Пример:

  • scoresIncreasing([1, 3, 4]) -> true

  • scoresIncreasing([1, 3, 2]) -> false

  • scoresIncreasing([1, 1, 4]) -> true

Проект - игра "Крестики-нолики"

Реализуйте игру "Крестики-нолики". В игру играют два человека, поочередно вводя координаты поля, куда необходимо поставить крестик или нолик. Ввод происходит в формате [строка] [столбец]. Например: 0 0 или 1 2.

Сценарий игры будет примерно следующим

---------
|       |
|       |
|       |
---------
First player: 0 0
---------
| X     |
|       |
|       |
---------
Second player: 1 1
---------
| X     |
|   0   |
|       |
---------
First player: 0 1
---------
| X X   |
|   0   |
|       |
---------
Second player: 2 2
---------
| X X   |
|   0   |
|     0 |
---------
First player: 0 2
First player won!

Process finished with exit code 0

Ниже представлен возможный вариант метода для отрисовки поля. В данном случае подразумевается, что в двумерном массиве число 0 соответствует пустому полю, число 1 соответствует X, а число - 1 соответствует 0.

Main.java
    public static void drawField(int[][] array) {
        System.out.println("---------");
        for (int i = 0; i < 3; i++) {
            System.out.print("| ");
            for (int j = 0; j < 3; j++) {
                String symbol = " ";
                if (array[i][j] != 0)
                    symbol = array[i][j] == 1 ? "X" : "0";
                System.out.print(symbol + " ");
            }
            System.out.println("|");
        }
        System.out.println("---------");
    }

Блок-схема алгоритма программы может быть примерно следующей.

В качестве дополнительного задания необходимо предусмотреть метод для проверки корректности ввода: можно ставить крестик или нолик только в свободную ячейку, а также отслеживать выход за пределы поля при указании номера строки и столбца.

Если пользовательский ввод оказался некорректным, то программа просит игрока повторить ход.

4KB
javalab1.zip
archive