Создан метод, с помощью которого устанавливаются часы. Имеется обрабатываемое исключение ArrayIndexOutOfBoundsException
. Но почему, при вводе значения set_value = 33
, исключение не обрабатывается (часов ведь максимум 24)?
Ссылка на описание: https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html#set-int-int-
public void setHours(int set_value) throws ArrayIndexOutOfBoundsException {
try {
objCalendar.set(Calendar.HOUR_OF_DAY, set_value);
getMessageTime();
} catch (ArrayIndexOutOfBoundsException a) {
getMessageErrorRangeOfValues();
objCalendar.set(Calendar.HOUR_OF_DAY, 0);
}
}
UPD:
Оказывается, исключение бросается, если объект класса Calendar
установлен в режим `non-lenient'.
Оригинальная цитата:
Leniency
Calendar has two modes for interpreting the calendar fields, lenient and non-lenient. When a Calendar is in lenient mode, it accepts a wider range of calendar field values than it produces. When a Calendar recomputes calendar field values for return by get(), all of the calendar fields are normalized. For example, a lenient GregorianCalendar interprets MONTH == JANUARY, DAY_OF_MONTH == 32 as February 1.
When a Calendar is in non-lenient mode, it throws an exception if there is any inconsistency in its calendar fields. For example, a GregorianCalendar always produces DAY_OF_MONTH values between 1 and the length of the month. A non-lenient GregorianCalendar throws an exception upon calculating its time or calendar field values if any out-of-range field value has been set. `
Решение:
Установить режим non-lenient' с помощью метода
setLenient()вот так
obj.setLenient(false);. По умолчанию режим ставится как
true`.
Тогда код выглядит так:
public void setHours(int set_value) throws ArrayIndexOutOfBoundsException {
try {
objCalendar.set(Calendar.HOUR_OF_DAY, set_value);
getMessageTime();
} catch (ArrayIndexOutOfBoundsException a) {
getMessageErrorRangeOfValues();
objCalendar.set(Calendar.HOUR_OF_DAY, 0);
}
}
Но после установки режима в false
начинает выбрасывать другое исключение - IllegalArgumentException
. Хорошо, попытаемся обработать и это исключение. Тогда код будет выглядеть следующим образом:
public void setHours(int set_value) throws ArrayIndexOutOfBoundsException, IllegalArgumentException {
try {
objCalendar.set(Calendar.HOUR_OF_DAY, set_value);
getMessageTime();
} catch (IllegalArgumentException i) {
getMessageErrorRangeOfValues();
objCalendar.set(Calendar.HOUR_OF_DAY, 0);
}
}
Но вот незадача. Опять выбрасывает исключение Exception in thread "Thread-0" java.lang.IllegalArgumentException:
.
Ответ: разбираюсь на данный момент
Дочитывайте документацию:
objCalendar.setLenient(false);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не нашел документации на русском языке, а по официальной документации не могу разобраться https://developerandroid
В список заношу стринги, сортируюsort()-ом ожидаю увидеть прорядок но не вижу его
Создал небольшую форму пробную, есть задание сменить цвет фонаВсе вроде бы просто