User Defined Exceptions using Constructors in Java
In Java, we have already defined, exception classes such as ArithmeticException, NullPointerException etc. These exceptions are already set to trigger on pre-defined conditions such as when you divide a number by zero it triggers ArithmeticException.
In Java, we can create our own exception class and throw that exception using throw keyword. These exceptions are known as user-defined or custom exceptions.
Problem statement: Realize a Java class Matrix to represent bi-dimensional matrices of real numbers. The class should export the following methods:
- Matrix(int n, int m): Constructor that creates a matrix of size nxm, with all values initially set to 0;
- Matrix product(Matrix m): It returns the matrix that is the product of the object and of m, if the two matrices have compatible dimensions, and null otherwise; ExceptionWrongMatrixDimension that is thrown in the method check() if the dimension of the matrix is wrong for the multiplication of the matrix.
Example:
Java
// Java program to create user defined // exceptions import java.util.Scanner; // User defined exception class to store the exception // message class ExceptionWrongMatrixDimension extends Exception { public ExceptionWrongMatrixDimension(String str) { // stores the exception message to be displayed super (str); } } class twoDimensionalMatrix { void Matrix( int n, int m) throws ExceptionWrongMatrixDimension { // initialize matrix to be processed int [][] matrix = { { 1 , 2 }, { 4 , 5 , } }; System.out.println( "\nMatrix is :" ); for ( int i = 0 ; i < m; i++) { for ( int j = 0 ; j < n; j++) { System.out.print(matrix[i][j] + " " ); } System.out.println(); } int rows = 2 ; int cols = 2 ; if (n != rows) { // throw keyword for an exception in a method throw new ExceptionWrongMatrixDimension( "Invalid matrix dimensions to multiply" ); } else { int [][] m_matrix = { { 6 , 3 }, { 9 , 2 , } }; System.out.println( "\nMatrix to multiply is :" ); for ( int i = 0 ; i < rows; i++) { for ( int j = 0 ; j < cols; j++) { System.out.print(m_matrix[i][j] + " " ); } System.out.println(); } System.out.println( "\nMatrix to multiply is :" ); for ( int i = 0 ; i < rows; i++) { for ( int j = 0 ; j < cols; j++) { System.out.print(m_matrix[i][j] + " " ); } System.out.println(); } int c[][] = new int [m][n]; for ( int i = 0 ; i < rows; i++) { for ( int j = 0 ; j < rows; j++) { c[i][j] = 0 ; for ( int k = 0 ; k < rows; k++) { c[i][j] += matrix[i][j] * m_matrix[k][j]; } } } System.out.println( "\n\nMatrix after multiplication is" ); for ( int i = 0 ; i < rows; i++) { for ( int j = 0 ; j < cols; j++) { // prints the third matrix containing // the multiplied values System.out.print(c[i][j] + " " ); } System.out.println(); } } } } public class Main { public static void main(String args[]) { twoDimensionalMatrix matrix = new twoDimensionalMatrix(); try { // block of code to be tested for errors while // it is being executed. System.out.println( "Enter the number of rows" ); int n = 2 ; System.out.println( "Enter the number of columns" ); int m = 2 ; matrix.Matrix(n, m); } catch (ExceptionWrongMatrixDimension e) { // block of code to be executed, if an error // occurs in the try block. System.out.println( "ExceptionWrongMatrixDimension:" ); // returns a method object. The name parameter // is passed as a string. System.out.println(e.getMessage()); } } } |
Output
Enter the number of rows Enter the number of columns Matrix is : 1 2 4 5 Matrix to multiply is : 6 3 9 2 Matrix to multiply is : 6 3 9 2 Matrix after multiplication is 15 10 60 25