Курс "Объектно-ориентированное программирование"
  • Главная
  • 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
  • Задание 1.
  • Задание 2.
  • Задание 3.
  • Задание 4.

Was this helpful?

Export as PDF
  1. Архив
  2. Архив
  3. Лабораторные работы
  4. Лабораторная работа 9

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

Задание 1.

Вам дан файл Sums.java, в которой содержится программа.

Данная программа позволяет пользователю ввести набор целых чисел и вывести сумму этих чисел. Программа спрашивает пользователя, хочет ли он посчитать сумму чисел; если пользователь отвечает ‘y’, то программа принимает на вход из консоли множество целых чисел до тех пор, пока пользователь не введет число ‘0’. После этого программа выводит сумму этих чисел и повторяет вопрос снова. Если пользователь отвечает ‘n’, программа заканчивает работу.

Sums.java
public class Sums {

    public static void sum(BufferedReader in){
        // Программа получает последовательность целых чисел на вход
        // и возвращает сумму этих чисел
        int s, nextInt;
        s = 0;

        System.out.println("Пожалуйста, введите последовательность чисел, для окончания ввода, введите 0");
        nextInt = Integer.parseInt(in.readLine());

        // Читаем следующее значение. Ожидаем целое число
        while (nextInt!=0) {
            s = s + nextInt;
            nextInt = Integer.parseInt(in.readLine());
        }

        System.out.println("Сумма равна " + s);
    }

    public static void main(String[] arg) {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        // in будет получать данные из стандартного входного потока

        System.out.println("Вы хотите посчитать сумму чисел? (y/n)");

        String c = in.readLine();
        // Проверяем правильность ввода
        // Если ввод некорректен - просим повторить снова
        while (!c.equals("y") && !c.equals("n")) {
            System.out.println("Пожалуйста, повторите ввод (y/n)");
            c = in.readLine();
        }

        while (c.equals("y")) {
            sum(in); // Функция для ввода и подсчета суммы чисел
            System.out.println("Вы хотите посчитать сумму еще раз? (y/n)");
            c = in.readLine();

            while (!c.equals("y") && !c.equals("n")) {
                System.out.println("Пожалуйста, повторите ввод (y/n)");
                c = in.readLine();
            }
        }

        System.out.println("Программа заканчивает работу.");
    }
}

На данный момент программа не компилируется из-за проблем с checked-исключениями. Модифицируйте программу путем добавления обработчиков исключений в нужных местах. Подумайте, могут ли в программе возникнуть какие-то unchecked-исключения, если да – предусмотрите обработчик событий для этих исключений.

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

Задание 2.

Дан класс ListOfNumbers (листинг класса представлен ниже). Создайте консольное приложение на основе этого класса. Добавьте в класс ListOfNumbers метод readList(). Этот метод должен считывать int значения из файла, выводить в консоль каждое значение, после чего добавлять значение в коллекцию List. Ваш код должен «отлавливать» все соответствующие исключения. Также, создайте текстовый файл со значениями. При сдаче лабораторной работы вы должны представить работоспособную консольную программу.

Также замените блок finally на try-with-resources.

ListOfNumbers.java
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class ListOfNumbers {
    private List<Integer> list;
    private static final int LIST_SIZE = 10;

    public ListOfNumbers() {
        list = new ArrayList<>(LIST_SIZE);
        for (int i = 0; i < list.size(); i++)
            list.add(i);
    }

    public void writeList() {
        PrintWriter out = null;

        try {
            System.out.println("Entering try statement");
            out = new PrintWriter(new FileWriter("OutFile.txt"));

            for (int i = 0; i < list.size(); i++)
                out.println("Value at: " + i + " = " + list.get(i));
        } catch (IndexOutOfBoundsException e) {
            System.err.println("Caught IndexOutOfBoundsException: " +
                    e.getMessage());
        } catch (IOException e) {
            System.err.println("Caught IOException: " + e.getMessage());
        } finally {
            if (out != null) {
                System.out.println("Closing PrintWriter");
                out.close();
            } else {
                System.out.println("PrintWriter not open");
            }
        }
    }
}

Задание 3.

Перепишите код второй лабораторной работы с использованием механизма исключений. При необходимости, добавьте свои классы исключений (подумайте, от каких стандартных классов исключений они должны наследоваться).

Задание 4.

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

PreviousЛабораторная работа 9NextВидеолекции

Last updated 5 years ago

Was this helpful?