From a062cc1ca2b627e7a80547cebf95ede579a699d7 Mon Sep 17 00:00:00 2001 From: Leonid Date: Tue, 8 Apr 2025 23:44:30 +0300 Subject: [PATCH] Lesson 3 homework solution --- .../java/com/algos/vtb/exceptions/Main.java | 60 +++++++++++++++++++ .../vtb/exceptions/MyArrayDataException.java | 25 ++++++++ .../vtb/exceptions/MyArrayException.java | 10 ++++ .../vtb/exceptions/MyArraySizeException.java | 19 ++++++ 4 files changed, 114 insertions(+) create mode 100644 src/main/java/com/algos/vtb/exceptions/Main.java create mode 100644 src/main/java/com/algos/vtb/exceptions/MyArrayDataException.java create mode 100644 src/main/java/com/algos/vtb/exceptions/MyArrayException.java create mode 100644 src/main/java/com/algos/vtb/exceptions/MyArraySizeException.java diff --git a/src/main/java/com/algos/vtb/exceptions/Main.java b/src/main/java/com/algos/vtb/exceptions/Main.java new file mode 100644 index 0000000..24bc659 --- /dev/null +++ b/src/main/java/com/algos/vtb/exceptions/Main.java @@ -0,0 +1,60 @@ +package com.algos.vtb.exceptions; + +import java.util.stream.IntStream; + +public class Main { + public static void main(String[] args) { + + String[][] myArray = new String[][]{ + {"1", "2", "3", "4"}, + {"5", "6", "7b", "8"}, + {"9", "10", "5", "12"}, + {"13", "14", "15", "16"} + }; + try { + System.out.printf("Cумма = %d%n", getSum(myArray)); + } catch (MyArrayException e) { + System.out.println("Exception processed"); + } + } + + private static int getSum(String[][] myArray) throws MyArraySizeException, MyArrayDataException { + + if (myArray.length != 4) { + throw new MyArraySizeException("Размер массива должен быть 4x4!"); + } + +// for (int i = 0; i < myArray.length; i++) { +// if (myArray[i].length != 4) { +// throw new MyArraySizeException(i); +// } +// } + +// IntStream.range(0, myArray.length) +// .forEach(i -> { +// if (myArray[i].length != 4) { +// throw new MyArraySizeException(i); +// } +// }); + + + IntStream.range(0, myArray.length) + .filter(i -> myArray[i].length != 4) + .findFirst() + .ifPresent(i -> { + throw new MyArraySizeException(i); + }); + + int sum = 0; + for (int i = 0; i < myArray.length; i++) { + for (int j = 0; j < myArray[i].length; j++) { + try { + sum += Integer.parseInt(myArray[i][j]); + } catch (NumberFormatException e) { + throw new MyArrayDataException(i, j, myArray); + } + } + } + return sum; + } +} diff --git a/src/main/java/com/algos/vtb/exceptions/MyArrayDataException.java b/src/main/java/com/algos/vtb/exceptions/MyArrayDataException.java new file mode 100644 index 0000000..2871281 --- /dev/null +++ b/src/main/java/com/algos/vtb/exceptions/MyArrayDataException.java @@ -0,0 +1,25 @@ +package com.algos.vtb.exceptions; + +public class MyArrayDataException extends MyArrayException { + + private int row; + + private int col; + + private Object value; + + public MyArrayDataException() { + super(); + } + + public MyArrayDataException(String message) { + super(message); + } + + public MyArrayDataException(int row, int col, Object[][] array) { + super("Неверные данные в массиве [" + row + "][" + col + "]: " + array[row][col]); + this.row = row; + this.col = col; + this.value = array[row][col]; + } +} diff --git a/src/main/java/com/algos/vtb/exceptions/MyArrayException.java b/src/main/java/com/algos/vtb/exceptions/MyArrayException.java new file mode 100644 index 0000000..e59f744 --- /dev/null +++ b/src/main/java/com/algos/vtb/exceptions/MyArrayException.java @@ -0,0 +1,10 @@ +package com.algos.vtb.exceptions; + +public class MyArrayException extends RuntimeException{ + public MyArrayException() { + } + + public MyArrayException(String message) { + super(message); + } +} diff --git a/src/main/java/com/algos/vtb/exceptions/MyArraySizeException.java b/src/main/java/com/algos/vtb/exceptions/MyArraySizeException.java new file mode 100644 index 0000000..cd785ce --- /dev/null +++ b/src/main/java/com/algos/vtb/exceptions/MyArraySizeException.java @@ -0,0 +1,19 @@ +package com.algos.vtb.exceptions; + +public class MyArraySizeException extends MyArrayException { + + int row; + + public MyArraySizeException() { + super(); + } + + public MyArraySizeException(String message) { + super(message); + } + + public MyArraySizeException(int row) { + super(String.format("Размер массива в строке %d не равен 4", row)); + this.row = row; + } +}