Обработка исключений Excepions Java
Только прошел эту тему по исключениям на курсах. Подскажите пожалуйста в решении такой задачи, а именно в обработке исключений. В метод на ввод задается двумерный стринговый массив размером 4х4. Нужно посчитать сумму его элементов. Если размер массива не 4х4 нужно выбросить исключение ArraySizeException (делаем его сами). Элементы стрингового массива представлены цифрами для превращения их в инт методом Integer.parseInt. Если в массиве другой символ - нужно выкинуть другое исключение ArrayDataException (тоже нужно сделать его самому, и в сообщении указать ячейку где задан не правильный символ) - как это сделать ? Так же при вводе не правильного символа выбрасывается стандартное исключение NumberFormatException - как его одработать ? Вот мой код : метод :
static int doCalc(String[][] matrix) {
if (matrix.length != 4 ) throw new ArraySizeException(" Make matrix size 4x4");
int sum = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
sum += Integer.parseInt(matrix[i][j]);
}
}
return sum;
}
И в мейне :
public static void main(String[] args) {
int result = 0;
try {
result = doCalc(new String[][] {{"1", "a", "3", "4"}, {"5", "6", "7", "8"}, {"9", "10", "11", "12"}});
} catch (ArraySizeException ex) {
System.out.println(ex.getMessage());
result = doCalc(new String[][] {{"1", "a", "3", "4"}, {"5", "6", "7", "8"}, {"9", "10", "11", "12"}, {"9", "10", "11", "12"}});
}catch (ArrayDataException exception){
System.out.println(exception.getMessage());
result = doCalc(new String[][] {{"1", "2", "3", "4"}, {"5", "6", "7", "8"}, {"9", "10", "11", "12"}, {"9", "10", "11", "12"}});
}
System.out.println(" Sum = " + result);
}
Ответы (1 шт):
Не совсем понятно, почему вас загнал в ступор NumberFormatException , если вы ниже пишете код, обрабатывающий исключения? Да, он обрабатывает ваши исключения, но какая разница? NumberFormatException подчиняется таким же правилам, как и все остальные исключения.
Кроме того, для проверки того, что массив действительно имеет размер 4х4 неплохо бы контролировать две длины матрицы , а не одну, ведь это двухмерный массив, единственным вызовом метода length здесь не отделаешься.
Если вы не понимаете , в чем именно проблема проверки длины, которую выполнили вы, прочитайте про так называемые "лохматые матрицы". Ели в двух словах, то ожидаемая вами матрица (4х4), должна выглядеть так:
1234
1234
1234
1234
Но не забывайте, что в Джаве возможно создание, к примеру, такой матрицы:
1234
123
12
1234
В итоге попробуйте сделать примерно так:
static int doCalc(String[][] matrix) {
int sum = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix.length != 4 || matrix[i].length != 4) throw new ArraySizeException("Make matrix size 4x4");
try {
sum += Integer.parseInt(matrix[i][j]);
} catch (NumberFormatException e) {
throw new ArrayDataException("Incorrect array's data : " + i + " - " + j);
}
}
}
return sum;
}
и теперь метод мейн:
public static void main(String[] args) {
//пробуем с заведомо некорректным размером массива
try {
int result = doCalc(new String[][]{{"1", "a", "3", "4"}, {"5", "6", "7", "8"}, {"9", "10", "11", "12"}});
System.out.println(result);
} catch (ArraySizeException | ArrayDataException ex) {
System.out.println(ex.getMessage());
}
//пробуем с заведомо некорректными данными в массиве
try {
int result = doCalc(new String[][]{{"1", "a", "3", "4"}, {"5", "6", "7", "8"}, {"9", "10", "11", "12"}, {"9", "10", "11", "12"}});
System.out.println(result);
} catch (ArraySizeException | ArrayDataException exception) {
System.out.println(exception.getMessage());
}
//пробуем корреткные данные
try {
int result = doCalc(new String[][]{{"1", "2", "3", "4"}, {"5", "6", "7", "8"}, {"9", "10", "11", "12"}, {"9", "10", "11", "12"}});
System.out.println(result);
} catch (ArraySizeException | ArrayDataException exception) {
System.out.println(exception.getMessage());
}
}
Не стесняйтесь задавать вопросы, если что-то непонятно