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