Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Задание для "Java Школа 16" от Сбера

1. Реализовать интерфейс Terminal, c помощью которого можно:

  • Проверить состояние счета
  • Снять/ положить деньги

Доступ к терминалу (терминал для одного счета) предоставляется только после ввода корректного пин-кода (4 цифры). Каждое нажатие должно восприниматься системой как ввод очередного символа пин-кода. При вводе нецифрового символа система должна выдать предупреждение, но при этом данное действие не считается критичной ошибкой ввода и состояние системы должно восстановиться к последнему корректному состоянию.

При вводе 3 неправильных пин-кодов аккаунт блокируется на 10 сек (при попытке обратиться к нему в течение этого времени должно вызываться исключение AccountIsLockedException c информацией об оставшемся времени до снятия блокировки).

Класть и снимать деньги можно только, если сумма кратна 100.

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

Класс терминал может содержать следующие поля:

class TerminalImpl {
    private final TerminalServer server;
    private final PinValidator pinValidator; 
   ...
}

Часть команд терминал делегирует этим классам.

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

TerminalServer и PinValidator могут кидать свои собственные исключения. Конечный пользователь не должен видеть эти исключения, ему должны показываться человеко-читабельные сообщения об ошибках

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

2. Реализуйте метод readContent(String url), который отображает на экран содержимое сайта, ссылка на который задаётся параметром url.

Напишите программу, считывающую из консоли строку (URL ресурса) и вызывающую метод readContent. В том случае, если введённый URL неправильного формата или нет доступа до указанного ресурса, пользователю предлагается повторить ввод.

3. Вопросы для самоконтроля:

Правильно ли написан следующий код:

try {
    
} finally {
    
}

Ответ

Правильно

Какие исключения могут быть перехвачены следующим обработчиком:

catch (Exception e) {
     
}

Что не так с использованием такого обработчика?

Ответ

Перехватывает все исключения, которые являются производными класса Exception. То есть вообще почти все. И будет не ясно, какое именно исключение у нас произошло.

Имеется ли ошибка в написании такого обработчика исключения? Скомпилируется ли этот код?

try {

} catch (Exception e) {

} catch (ArithmeticException a) {

}

Ответ

Этот код не скомпилируется. Причина в том, что блок catch (ArithmeticException a) никогда не будет достигнут.

Сопоставьте каждую ситуацию из первого списка с пунктом второго списка:

  • int[] A; A[0] = 0;

  • JVM начинает запускать вашу программу, но обнаруживает, что не может найти классы Java платформы;

  • программа читает входной поток и достигает маркера конца потока;

  • после достижения маркера конца входного потока, но до закрытия самого потока, программа пытаться считать данные.

  • ошибка;

  • проверяемое исключение;

  • ошибка компиляции;

  • исключение не произойдёт.

Ответ

int[] A; A[0] = 0; ошибка компиляции;
JVM начинает запускать вашу программу, но обнаруживает, что не может найти классы Java платформы; ошибка;
программа читает входной поток и достигает маркера конца потока; исключение не произойдёт.
после достижения маркера конца входного потока, но до закрытия самого потока, программа пытаться считать данные. проверяемое исключение;

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages